Sentinel是什么
Sentinel的官方标题是:分布式系统的流量防卫兵,实现接口限流。
主要功能有 限流 熔断降级 热点
使用步骤
- 导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 修改配置文件
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
dashboard: localhost:8089
port: 8070 #这个没什么必要,因为占用了他会自己换一个没用的
eager: true #这个是开启饥渴模式,不用服务接收到请求后,服务才会去 Sentinel控制台 注册
Sentinel坑
1.@SentinelResource 自定义资源规则
blockHandler: 限流处理方法。只能是本类中的public方法,接收参数与返回参数要与标注方法一致,且接收参数必须要有BlockException否则切入不了,如果要使用外部类的方法就要 搭配blockHandlerClass
blockHandlerClass: 限流处理类。使用外部类的限流方法,此类限流方法一定要用static修饰 否则获取不到
fallback: 降级方法。只能是本类中的public方法,接收参数与返回参数要与标注方法一致,且接收参数必须要有Throwable 参数 否则切入不了,如果要使用外部类的方法就要 搭配fallbackClass
fallbackClass: 降级处理类。使用外部类的限流方法,此类限流方法一定要用static修饰 否则获取不到
注意: 同时有限流和降级方法,都满足触发条件,他会先触发降级方法
defaultFallback: 默认的降级方法,如果同时有defaultFallback和fallback,执行fallback。若是外部类的fallback方法,可以结合fallbackClass一起使用
exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。
entryType: 节点类型 出口流量OUT / 入口流量IN
2.Sentinel注册的应用 重启后限流规则丢失
Sentinel数据持久化 - 采用nacos配置中心存储,还有redis,consul,zookeeper之类的
注意:采用Nacos配置中心去存储,在sentinel新增规则还是会丢失,因为这个存储只是sentinel启动去nacos配置中心取规则,如果想实现sentinel改动规则同步到nacos也是可以实现,要通过修改sentinel源码实现,具体实现可以网上查阅传送门
1.引入依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2.配置文件
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
dashboard: localhost:8089
port: 8070
eager: true
datasource:
ds:
nacos:
server-addr: 127.0.0.1:8848
dataId: ${spring.application.name}-sentinel
groupId: lzj
3.在nacos配置中心创建与配置文件中配置的信息一致的配置文件信息
JSON格式
[{
"resource": "/hello",
"limitApp": "default",
"grade": 1,
"count": 5,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}]
3.Sentinel 限流配置
4.Sentinel 降级配置
5.Sentinel 热点配置
一键查询淘宝/拼多多内部优惠券,每日大额外卖红包,购物省钱的宝藏工具