- Sentinel 介绍
- sentinel 控制台的下载
- 项目的准备:
- pom:
- yaml:
- 主启动类:
- 控制台的使用
- 流控规则:
- qps
- 线程的配置:
- 预热:
- 链路:
- 排队:
- 热点规则
- 参数特列:
- 系统规则:
- 降级:
- 熔断:
- 自定义class 解耦:
- 自定义类
- 方法的调用
- 持久化:
- 补充
sentinel 相当于是 hystrix 升级版
官网
实现熔断与限流:
下载地址
下载成功后是一个jar包 使用 java-jar 指令就可以运行了
打开 localhost:8080 端口就行: 默认密码账户都是 sentinel
最主要的是这两个
com.alibaba.csp
sentinel-datasource-nacos
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
yaml:
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
sentinel:
transport:
dashboard: localhost:8080 #配置Sentinel dashboard地址
port: 8719
datasource:
ds1: #把sentinel规则存入nacos
nacos:
server-addr: localhost:8848 # nacos地址
dataId: ${spring.application.name} #服务的名称
groupId: DEFAULT_GROUP # 分组名称
data-type: json #储存格式
rule-type: flow # 规则格式
主启动类:
这个注解记得加
@EnableDiscoveryClient控制台的使用 流控规则: qps
这个配置就表示 一秒内单击数量不能超过1(单机阈值)
图解:
左边高并发 qps 启动的效果
右边 线程的配置 配了一个 相当于就一个服务点 其他的无法处理直接报错
列子 这个线程 睡一秒每一个
然后 过多访问其他的 处理不了直接报错
结果就是 开始疯狂点击testB 链接 刚开始会报错后续就不会报错了 慢慢进入了加热状态。
待补充
排队:
默认每隔500ms 放 两个进来 其他的排队 要是排队时候超过了4000ms 则报错。注意是排队的时长 不是你的代码处理时长哦 你的代码就算睡一分钟 他也不会报错
然后可视化界面配置:
资源名: 就是你加的那个注解时候配置的昵称
参数索引 : 就是你要限制哪个参数的 位置(从0开始)
单机阈值: 一秒内多少次
窗口时长:????
效果 你设定的哪个参数 只要传的链接 有他 且满足要求(单机阈值达标) 那就会施行对应的兜底方法。
表示 如果第一参数 如果传的值是5 则阈值变成 200 (记得点击右边的添加和下面的保存)
系统规则:不常用 这个相当于对这个服务进行配置 前面的都是对具体的方法配置。
降级:降级的作用 :
就是你在前面设置了 这个链接 一秒只能点击2下 如果超过了 那就会 施行降级
如果你没有进行自定义的降级方法 那就是默认的提示
自定义的降级则需要使用 这个注解: @SentinelResource
blockHandler 代表 降级使用那个方法
‘
deal_testHotkey 是降级后使用的方法 参数必须加 BlockException
列子:
@GetMapping("/testHotkey")
@SentinelResource(value = "testHotke",blockHandler = "deal_testHotkey")
public String hotkeyTest(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p2",required = false)String p2){
return "testHotkey";
}
public String deal_testHotkey(String p1, String p2, BlockException exception){
return "deal_testHotkey 降级方法";
}
熔断:
熔断就是 你的这个方法出错了 或者超时等 问题 该执行的方法:
一样的使用 这个注解: @SentinelResource
不过不同的是 注解里面的参数 fallback 才代表 熔断使用的方法
由于进行熔断和降级都需要 另外写方法 于是 可以把方法写在类里面
然后 利用注解使用
注意 方法是静态的不然 无法使用:
注意和 hystrix 一样 兜底的方法 参数要保持一致。
注解只需要写上类 和要使用的方法即可:
持久化:把sentinel 的规则储存到nacos :
导入依赖:
com.alibaba.csp sentinel-datasource-nacos
配置yaml:
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
sentinel:
transport:
dashboard: localhost:8080 #配置Sentinel dashboard地址
port: 8719
datasource:
ds1: #把sentinel规则存入nacos
nacos:
server-addr: localhost:8848 # nacos地址
dataId: ${spring.application.name} #服务的名称
groupId: DEFAULT_GROUP # 分组名称
data-type: json #储存格式
rule-type: flow # 规则格式
在nocos 配置信息: id 得是你为服务的名称
[
{
"resource":"/testB",
"limitApp":"default",
"grade":1,
"count":1,
"strategy":0,
"controlBehavior":0,
"clusterMode":false
}
]
然后 重启后需要访问了 testB 才能在sentinel显示出来,但是效果已经出来了。
@SentinelResource 的name
注意:添加规则 如果直接使用他的 /路径 则兜底的方法 不会施行
得使用 他填写在注解的名字才行。



