Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway
程序员文章站
2022-06-27 21:04:46
Nacos ,是阿里大佬的服务框架。简述:Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。作用: 基本功能 就是 替代 Eureka ,Apollo 实现 服务管理,配置中心的功能。Nacos 安装使用:下载地址:https://github.com/alibaba/nacos/releases官方文档:https://nacos.io/zh-cn/index.html使用方法:window版本,cmd窗口 ,startup.cmd —....
Nacos ,是阿里大佬的服务框架。简述:Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
作用: 基本功能 就是 替代 Eureka ,Apollo 实现 服务管理,配置中心的功能。
Nacos 安装使用:
- 下载地址:https://github.com/alibaba/nacos/releases
- 官方文档:https://nacos.io/zh-cn/index.html
- 使用方法:window版本,cmd窗口 ,startup.cmd — 其实就相当于启动了一个服务.
配置中心
使用原因:分布式项目的配置文件过多,不好管理,等…
主要流程:
拉取: 是在项目启动的时候通过配置中心拉取配置信息
推送: 在配置中心修改配置之后,可以将配置实时地推送给客户端进行更新,这样项目不用 重启,修改配置实时生效,延迟较低.
配置中心实现操作:
- 导包
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2.启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author hexiaoshu
*/
@EnableDiscoveryClient
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
3.新建 bootstrap.yaml 文件
spring:
profiles:
active: dev
application:
name: nacos-client #应用名称, 对应关系 nacos配置列表的 Data ID 名称,跟服务名称一致,就能匹配上。
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: 127.0.0.1:8848 #nacos服务地址
file-extension: yaml #配置文件类型
- nacos后台,配置列表 添加配置。 注意 Data ID 跟,服务名称对应
- 启动 。就会自动去nacos拉取配置信息了.
- openfeign 一样可以照旧使用 ( → 见上篇文章 )。
网关配置 gateway
网关:
API 网关是对外提供服务的一个入口,并且隐藏了内部架构的实现,是微服务架构中必不可少的一个组件。
API 网关可以为我们管理大量的 API 接口,负责对接客户、协议适配、安全认证、路由转发、流量限制、日志监控、防止爬虫、灰度发布等功能
pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<!-- 监控管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
bootstrap.yaml
spring:
application:
name: nacos-gateway
cloud:
nacos:
config:
group: GATEWAY_GROUP
server-addr: 127.0.0.1:8848
file-extension: yaml
nacos 新建配置文件
server:
port: 3000
spring:
cloud:
gateway:
discovery:
locator:
# 是否和服务注册与发现组件结合,设置为 true 后可以直接使用应用名称调用服务
enabled: true
# 路由(routes:路由,它由唯一标识(ID)、目标服务地址(uri)、一组断言(predicates)和一组过滤器组成(filters)。filters 不是必需参数。)
routes:
# uri以lb://开头(lb代表从注册中心获取服务),后面接的就是需要转发到的服务名称
# 路由标识(id:标识,具有唯一性)
- id: nacos-customer
# 目标服务地址(uri:地址,请求转发后的地址)
uri: lb://nacos-customer
# 路由条件(predicates:断言,匹配 HTTP 请求内容)
predicates:
- Path=/consumer/** #匹配 如 localhost:3001/consumer/test的请求地址
# - After=2019-01-01T00:00:00+08:00[Asia/Shanghai] 匹配 2019年1月1日0点0分0秒之后的所有请求, -Before 为之前
# - Between=2019-01-01T00:00:00+08:00[Asia/Shanghai], 2019-07-01T00:00:00+08:00[Asia/Shanghai] 时间范围之内
# - Header=X-Request-Id, \d+ 请求头匹配
# - Host=**.baidu.com host域名匹配, www.baidu.com,md.baidu.com
# - Method=GET 请求方式匹配
# - Query=smile 请求参数匹配 ,eg:localhost:8080?smile=x&id=2
# - RemoteAddr=192.168.1.1/24 ,ip地址匹配
# 各种 Predicates 同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路由匹配
- id: nacos-config
uri: lb://nacos-config #lb:使用loadBalanceClient实现负载均衡,后面users是微服务的名称[应用于集群环境]
predicates:
- Path=/client/**
filters:
- SetResponseHeader=gatewayHeader, GateWay #转发添加设置响应头
- name: RequestRateLimiter # 局部限流过滤器
args:
key-resolver: '#{@iPKeyResolver}'
redis-rate-limiter.replenishRate: 1 # 每秒钟只允许1个请求
redis-rate-limiter.burstCapacity: 10 # 允许并发有3个请求[宽限的个数]
- name: RequestSize #设置文件上传大小
args:
maxSize: 5000000
redis:
database: 0 # 设置存储分片 db0
host: localhost
port: 6379
password:
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* @author hexiaoshu
*/
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayServerApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayServerApplication.class, args);
}
/**
* 创建用户唯一标识:使用IP作为用户唯一标识,根据IP进行限流操作
* @return
*/
@Bean(name = "iPKeyResolver")
public KeyResolver userKeyResolver(){
return new KeyResolver() {
@Override
public Mono<String> resolve(ServerWebExchange exchange) {
// 获得用户iP
String ip = exchange.getRequest().getRemoteAddress().getHostString();
return Mono.just(ip);
}
};
}
}
本文地址:https://blog.csdn.net/hesqlplus730/article/details/107341219
上一篇: vue前后端分离开发解决跨域的问题
下一篇: 轻课系统设计