一. 持久化 Sentinel 对接口的配置到 Nacos
- 简单解释: 假设有服务接口需要通过 Sentinel 设置流量控制,熔断降级等,将该服务注入到 Sentinel, 然后在 Sentinel 中对该服务的接口进行流控,熔断降级设置,但是会发现一个问题,当该服务宕机重启后, Sentinel 中对该服务设置的流控,熔断降级等相关设置都会丢失,假设多个服务发布重启,需要重新设置解决这个问题,可以将 Sentinel 数据进行持久化,此处以持久化到 Nacos 为例
- 步骤
- 创建服务,由于用到了 Nacos 作为注册中心,作为配合中心,用到了 Sentinel 配置管理当前服务,并需要进行持久化设置,需要引入 Nacos 注册中心依赖,Nacos 配置中心依赖,Sentinel 依赖与Sentinel持久化需要的依赖
- 通过yml配置文件配置
- 配置当前服务注册到 Nacos 注册中心
- 当前服务使用 Sentinel 进行流控,熔断降级设置,配置当前服务注入到哪个 Sentinel
- Nacos 配置中心中创建保存当前服务需要用到的配置文件配置变量
- Nacos 作为配置中心,配置当前服务通过哪个 Nacos 获取配置文件
- Nacos 配置中心中同时保存 Sentinel 用到的对当前服务接口设置的流控,熔断降级设置文件
- 配置当前服务 Sentinel 读取保存在 Nacos 配置中心上的流控,熔断降级等相关文件
配置持久化简单案例
- pom 文件中添加依赖
<!--nacos discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--sentinel-datasource-nacos 持久化需要用到-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- yml 文件中 Sentinel 配置中增加通过数据源读取数据的配置
server:
port: 8401 #当前服务端口号
spring:
application:
name: cloudalibaba-sentinel-service #当前服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址,将当前服务注册到Nacos
#=================sentinel 配置==========================================
sentinel:
transport:
dashboard: localhost:8080 #配置Sentinel dashboard地址,当前服务被指定的 Sentinel 监管
# 默认8719端口,假如被占用了会自动从8719端口+1进行扫描,直到找到未被占用的 端口
port: 8719
#配置 sentinel 读取数据的数据源
datasource:
#自定义的数据源名称,可以多个,必须唯一,可以理解为通过该数据源指定
#读取哪个位置的哪个文件中的数据,此处表示读取 Nacos 配置中心上的
#名为 cloudalibaba-sentinel-service 类型为 json 文件中的数据
#前提是指定的 Nacos 配置中心中要有该文件,该文件中保存的是,Sentinel
#对当前服务或服务中的接口设置的流控,熔断降级等相关的数据
ds1:
nacos:
server-addr: localhost:8848 #存放数据的数据源地址,通过 Nacos 保存相关数据
dataId: cloudalibaba-sentinel-service #读取 Ncaos 配置中心上文件的名称
groupId: DEFAULT_GROUP #读取 Nacos 配置中心哪个分组id
data-type: json #读取 Nacos 配置中心上的什么类型的文件
rule-type: flow #读取的规则类型
#=================sentinel 配置 end==========================================
#配置暴露当前服务端点
management:
endpoints:
web:
exposure:
include: '*'
feign:
sentinel:
enabled: true #激活Sentinel 对Feign的支持
- 登入 yml 中配置的 Sentinel 连接的 Nacos 配置中心,在配置中心中创建 Sentinel 读取的配置文件,添加针对当前服务的设置的流控,熔断降级相关数据
- 配置内容解释:
- “resource”: “/test1”,//对应 Sentinel 中的资源名称(接口请求路径,或指定的资源名称)
- “limitApp”: “default”,//对应 Sentinel 中的来源应用(在Stinel中一般使用默认的)
- “grade”: 1, //对应 Sentinel 设置的阈值类型,0 表示线程数,1 表示QPS
- “count”: 1,//对应 Sentinel 设置的单机阈值
- “strategy”: 0,//对应 Sentinel 设置的流程模式,0直接,1关联,2链路
- “controlBehavior”: 0,//对应 Sentinel 流程效果,0快速失败,1WarmUp,2排队等待
- “clusterMode”: false //对应 Sentinel 设置的是否集群
- 在项目启动后访问该服务中的任意一个接口时,会自动通过配置的 Sentinel 数据源读取 Nacos 上的指定的文件,加载配置内容,获取到针对该服务的流控,熔断,降级等相关数据(如果启动服务不妨问服务中的任何借口,默认是不会主动去读取数据的,Sentinel 流控页显示为空)
二. Sentinel 与 Feign 客户端
在通过 Sentinel 监管的服务中使用 Feing 客户端调用微服务接口,需要在 yml 配置文件中配置 Sentinel 对 Feign 的支持(上面的yml 中有),其它的使用还是按照以前的引入 Feign 依赖,启动类添加注解,创建 Feign 调用接口,使用@FeignClient修饰,通过注解的 value 值设置为需要调用的服务名称,fallback 属性值设置针对服务调用异常降级方法所在类,启动类添加 @EnableFeignClients 等等
feign:
sentinel:
enabled: true #激活Sentinel 对Feign的支持
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>