10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析
文章目录
- 10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析
- 1. 规则持久化
- 1.1 Nacos Server 配置中心-规则持久化实例
- 2. 最后:
1. 规则持久化
规则没有持久化的问题
如果 sentinel 流控规则没有持久化,当重启调用 API/接口 所在微服务后,规则就会丢失,需要 重新加入。
解决方案:通过 Nacos 进行持久化
规则持久化方案:
- 阿里云 Ahas[最方便/付费]:https://help.aliyun.com/zh/ahas/
- 在 Nacos Server 配置规则, 完成持久化 -官方推荐:将规则持久化到本地文件, 定时同步
1.1 Nacos Server 配置中心-规则持久化实例
需求:
-
member-service-nacos-consumer-80 微 服务的 /member/openfeign/consumer/get/1 API 接口添加流控规则 QPS=1/快速失败 .
-
要求将该流控规则加入到 nacos server 配置中心,实现持久化
代码+配置实现步骤:
- 在 Nacos Server 配置中心增加 Sentinel 客户端/微服务模块的流控规则。
[
{
"resource": "/member/openfeign/consumer/get/1",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
在 Nacos Server 配置中心增加 Sentinel 客户端/微服务模块 的流控规则参数说明
resource∶资源名称;
limlitApp∶ 来源应用;
grade∶阈值类型,0表示线程数,1表示QPS;
count∶单机阈值;
strategy∶流控模式,0表示直接,1表示关联,2表示链路;
controlBehavior∶流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
clusterMode∶是否集群
修改 member-service-nacos-consumer-80 的 pom.xml, 加入 sentinel 和 nacos 持久化整合依赖
<!-- 引入 sentinel 和 nacos 持久化整合依赖,使用版本仲裁-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
修改 member-service-nacos-consumer-80 的 application.yml , 配置该微服务从 Nacos Server 获取流控规则
在application.yaml 当中配置 rule-typle 规则:
datasource:
ds1:
# 流控规则配置是从 nacos server 配置中心获取
nacos:
server-addr: localhost:8848 # 指定 nacos server 配置中心地址
dataId: member-service-nacos-consumer # nacos server 配置中心当中对应的ID保持一致,一定要保持一致才行
groupId: DEFAULT_GROUP # 指定组[nacos server配置中心]
data-type: json # 指定配置流控规则的数据类型
rule-type: flow # 规则类型:流控规则 表示可以看文档
rule-type: flow # 规则类型:流控规则 表示可以看文档 有:flow流量控制,degrade熔断降级规则,system系统保护规则,authority 访问控制规则
spring:
application:
name: member-service-nacos-consumer-80
#配置 nacos 注册中心
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 配置 nacos server的地址
sentinel:
transport:
dashboard: localhost:9090 # 指定 sentinel 控制台地址(dash board)
port: 8719 # 设置端口默认是 8719 如果该端口被占用,就自动从8791+1进行扫描,直到找到一个没有占用的端口.
datasource:
ds1:
# 流控规则配置是从 nacos server 配置中心获取
nacos:
server-addr: localhost:8848 # 指定 nacos server 配置中心地址
dataId: member-service-nacos-consumer # nacos server 配置中心当中对应的ID保持一致,一定要保持一致才行
groupId: DEFAULT_GROUP # 指定组[nacos server配置中心]
data-type: json # 指定配置流控规则的数据类型
rule-type: flow # 规则类型:流控规则 表示可以看文档
测试
浏览器: ht启动 Nacos Server 8848
启动 Sentinel8080 控制台/Sentinel dashboard
启动 member-service-nacos-provider-10004/10006启动 member-service-nacos-consumer-80tp://localhost/member/openfeign/consumer/get/1
- 浏览器输入: http://localhost/member/openfeign/consumer/get/1 , 目前是 Openfeign 调用(负载均衡), 而且流控规则已经生效了.
- 注意看 sentinel, 这个流控规则已经生成了
- 查看 Sentinel 控制台 发现已经同步了流控规则
注意事项和细节:
- 在 nacos server 配置 sentinel 流控规则的 Data ID 也可以自己指定,比如写成 hsp-id, 只要在 sentinel client/微服务 的 applicaion.yml 的 datasource.ds1.nacos.dataId 的值保持一致即可。
2. 最后:
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”