2月5日作业
- 跑通sentinel插件
- 输出源码解析
- 总结
Demo
首先启动项目soul-admin以及soul-bootstrap,以soul-examples
中的soul-example-http
为例,注册到soul网关上。同时检查soul-bootstrap是否引入sentinel
的插件依赖:
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-sentinel</artifactId>
<version>${project.version}</version>
</dependency>
在soul-admin插件管理中心开启sentinel
插件
同时配置selector
以及相关的rule
,这里以http://localhost:9195/http/order/findById?id=1
为例,制定相应的限流熔断策略。
配置selector
策略
配置相关的rule
至此相关的配置已经完毕,接下来进行测试环节。
测试Sentinel插件
我们使用postman对http://localhost:9195/http/order/findById?id=1
进行测试
正常情况下可以得到我们想要的结果。但是如果我们尝试在短时间内多次发请求,则会看到以下结果:
说明sentinel限流的作用已经生效。
源码解析
sentinel插件和其他插件相同,都会执行 AbstractSoulPlugin 类的 execute() 方法,然后在SentinelPlugin
中覆写doExecute
方法,核心代码如下
可以看到sentinel
与hystrix
相比原则比较简单:根据对应资源配置的规则来为资源执行相应的限流/降级/负载保护策略。如果触发熔断限流机制则会通过fallbackHandler
来做服务降级处理。
总结
总体来说,配置sentinel插件时应该注意以下参数的配置:
-
是否开启流控(1或0) :是否开启sentinel的流控。
-
流控效果 : 流控效果(直接拒绝 / 排队等待 / 慢启动模式),不支持按调用关系限流。
-
限流阈值类型 : 限流阈值类型,QPS 或线程数模式。
-
是否开启熔断(1或0) :是否开启sentinel熔断。
-
熔断类型: 熔断策略,支持秒级 RT/秒级异常比例/分钟级异常数。
-
熔断阈值: 阈值。
-
熔断窗口大小: 降级的时间,单位为 s。
-
熔断URI: 熔断后的降级uri。