1、什么是热点参数
热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
-
商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
-
用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。
热点参数限流可以看做是一种特殊的流量控制
,仅对包含热点参数的资源调用生效。
Sentinel 利用 LRU(最近最少使用,是一种常用的页面置换算法) 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。
2、配置热点参数
-
需要在方法上增加@SentinelResource注解,用注解加入到sentinel的监控中,
不增加此注解会无效
,使用注解路径才会使热点监控生效@RequestMapping(value = "test1") @SentinelResource("test1") public String test1(Integer time) { return new Date().toString(); }
-
簇点链路中配置热点监控。注意是
对@SentinelResource注解中的value配置热点监控,否则无效
参数索引:若注解作用的方法上有参数,指的是第几个参数,参数索引从0开始(0代表第一个参数)
单机阀值:第几次请求后开始触发
-
高级选项
参数类型7种:int、double、String、float、long、char、byte
参数值:例如图中,参数索引0,参数值1;当一个参数的参数值等于1时,触发的阀值会变为2(限流阀值可以大于单机阀值,也可以小于),效果可以擦汗看实时监控图
3、自定义热点熔断返回异常
更多说明请查看Spring Cloud Alibaba Sentinel(一)中标题六
/**
* sentinel对SpringMVC标准的请求会有一个埋点,加入到sentinel的监控中
* @SentinelResource :用注解加入到sentinel的监控中,不增加此注解会无效,使用注解路径才会使热点监控生效
* fallback:回退函数的名称,默认为空
* fallbackClass:默认情况下,与原始方法位于同一类中。但是,如果某些方法共享相同的签名并打算设置相同的回退,则用户可以设置存在回退函数的类。请注意,共享回退方法必须是静态的。
* 更多参数,可以进入注解中查看
* @param time
* @return
*/
@RequestMapping(value = "test2")
@SentinelResource(value = "test2",fallback ="fallback", fallbackClass = MyFallbackClass.class)
public String test2(Integer time) {
return new Date().toString();
}
fallbackClass 如果不指定默认在当前类中顶一个fallback方法,如果指定则需要自定义个类,类中含有静态的fallback方法。
public class MyFallbackClass {
/**
* 该方法一定要是static方法
*/
public static String fallback(Integer time) {
return "Fall back.";
}
}
!!!!SpringCloudAlibaba项目集成代码示例!!!