若依微服务版(ruoyi-Cloud)如何实现熔断和降级?
知识前提:
若依微服务版(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: true
transport:
# 控制台地址
dashboard: 127.0.0.1:8718
# nacos配置持久化
datasource:
ds1:
nacos:
server-addr: 127.0.0.1:8848
dataId: sentinel-ruoyi-gateway
groupId: DEFAULT_GROUP
data-type: json
rule-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: true
transport:
# 控制台地址
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#基本介绍
标签:Java,14,nacos,ruoyi,sentinel,resource,gateway,cloud From: https://www.cnblogs.com/luyj00436/p/18674824