若依微服务版(ruoyi-Cloud)如何实现熔断和降级?
知识前提:
- 对Sentinel的使用有了解
- 若依微服务版启动
- 对nacos服务注册和使用有了解
若依微服务版(ruoyi-cloud)中使用sentinel,进行服务熔断与降级。
环境要求和前提
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 12
nacos >= 2.0.4 (ruoyi-cloud < 3.0 需要下载nacos >= 1.4.x版本)
sentinel >= 1.6.0
已运行和启动项目。sentinel下载地址:https://github.com/alibaba/Sentinel/releases
运行命令(文件位置,文件名称后的版本,可以根据实际需要更改):
java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.api.port=8719 -jar D:\sentinel\sentinel-dashboard-1.8.0.jar
若依内sentinel有关源码
在ruoyi-cloud中,网关模块(ruoyi-gateway),有配置sentinel和sentinel持久化。
# Spring
spring: cloud:sentinel:# 取消控制台懒加载eager: truetransport:# 控制台地址dashboard: 127.0.0.1:8718# nacos配置持久化datasource:ds1:nacos:server-addr: 127.0.0.1:8848dataId: sentinel-ruoyi-gatewaygroupId: DEFAULT_GROUPdata-type: jsonrule-type: gw-flow
所以,sentinel在nacos的持久化配置文件名称为sentinel-ruoyi-gateway
。限流策略如下:
[{"resource": "ruoyi-auth","count": 500,"grade": 1,"limitApp": "default","strategy": 0,"controlBehavior": 0},{"resource": "ruoyi-system","count": 1000,"grade": 1,"limitApp": "default","strategy": 0,"controlBehavior": 0},{"resource": "ruoyi-gen","count": 200,"grade": 1,"limitApp": "default","strategy": 0,"controlBehavior": 0},{"resource": "ruoyi-job","count": 300,"grade": 1,"limitApp": "default","strategy": 0,"controlBehavior": 0}
]
jsond的各个参数含义如下:
参数 | 说明 |
---|---|
resource | 资源名称 |
count | 单击阈值 |
grade | 阈值类型0表示线程数,1 表示QPS |
limitApp | 来源应用 |
strategy | 流控模式,0 表示直接,1 表示关联,2表示链路 |
controlBehavior | 流控效果,0 表示快速失败,1表示Warm up, 2 表示排队等待 |
所以,sentinel-ruoyi-gateway
配置下,几个模块200~500阈值的、QPS模式,直接访问,快速失败。
这种情况下,在我们的测试环境中,应该看不到效果。实际可以根据需要,做合适的持久化配置。
sping.cloud.sentinel.xx.nacos.rule-type 各个配置值含义
flow | 规则类型flow |
---|---|
degrade | 流量控制规则 |
param-flow | 参数限流规则 |
system | 系统保护规则 |
authority | 访问控制规则 |
gw-flow | com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule |
gw-api-group | com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition |
其他模块,也可以根据需要,添加sentinel依赖、配置。
<!-- springcloud alibaba sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency><!-- SpringBoot Web -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring: application:# 应用名称name: ruoyi-xxxx cloud:sentinel:# 取消控制台懒加载eager: truetransport:# 控制台地址dashboard: 127.0.0.1:8718
启动项目后,可以在Sentinel
控制台查看请求。
定义资源``@SentinelResource
、降级规则、流量规则、RestTemplate支持、OpenFeign支持等不再重复叙述。http://doc.ruoyi.vip/ruoyi-cloud/cloud/sentinel.html#基本介绍
参考网址
http://doc.ruoyi.vip/ruoyi-cloud/cloud/sentinel.html#基本介绍