回溯
什么是Sentinel?
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量
为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。
本文主要讲解 Sentinel 容错功能之一 热点规则 。
正文
环境准备
需要启动好 Sentinel 控制台,以及监控一个消费者。
若对这一步有疑虑,请参考SpringCloud Alibaba - Sentinel入门案例(一)。
编写一个消费者调用生产者的方法,并调用。
/**
* 注意这里必须使用 @SentinelResource 这个注解标识,否则热点规则不生效
* @param name
* @param age
* @param other
* @return
*/
@RequestMapping("/testMessageFunction4")
@SentinelResource("/HotspotRules")
public String testMessageFunction4(String name, Integer age ,String other) {
return name + age +other;
}
简单使用
热点参数流控规则是一种更细粒度的流控规则, 它允许将规则具体到参数上。
热点规则的限流模式只有一种 QPS 模式
- 参数索引:填写此服务的请求参数下标,默认从0开始。ps(以上面请求为例:name下标是0 / age下标是1 / other下标是2 (有使用过 javassist 的会比较容易理解))。
- 单机阈值:窗口时长中符合条件的次数。
- 统计窗机时长:统计时间。
依照上图的配置,意思是,当在三秒内,接收到了两次下标是0(name)的请求,会被降级。
若是没有传递下标为0(name)的参数,则不会限流。
以上证明,测试成功。
复杂使用
ps(高级选项只有当点击编辑的时候才会显示,而新增的时候是没有的)。
参数例外项 是对简单配置的参数索引进行更纤细的配置。
如上,我对下标为0(name)的索引进行了配置,当为胡歌的时候,并且在三秒内请求过一次后,进行降级。
可是当我name为刘亦菲的时候访问第二次并不会触发降级,只有当访问超过两次才会触发降级。
注意事项
- 当设置热点规则的时候,如果满足了参数例外项,那么触发降级。
- 不满足参数例外项,但却满足简单配置项,也会触发降级。
- 参数例外项优先级高于简单配置项。