平时咱们可能会对热点场景,比如说秒杀场景有解决方案,可能 sentinel 的 热点参数限流 功能也用不上
    热点场景,比如说微博,有个明星绯闻,明星官宣等等,这种微博可能就会有大量的网民去查看,可能就容易系统崩溃,

    何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

    • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
    • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

    热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,如果访问参数是热点数据,就进行限流。

    热点参数限流可以看做是一种特殊的流量控制,仅对入参是热点参数的请求调用生效。
    image.png
    注意:

    1. 热点规则需要使用@SentinelResource(“resourceName”)注解,否则不生效
    2. 参数必须是7种基本数据类型才会生效

    测试用例

    1. @RequestMapping("/info/{id}")
    2. @SentinelResource(value = "userinfo",
    3. blockHandlerClass = CommonBlockHandler.class,
    4. blockHandler = "handleException2",
    5. fallbackClass = CommonFallback.class,
    6. fallback = "fallback"
    7. )
    8. public R info(@PathVariable("id") Integer id){
    9. UserEntity user = userService.getById(id);
    10. return R.ok().put("user", user);
    11. }

    配置热点参数规则
    注意: 资源名必须是@SentinelResource(value=”资源名”)中 配置的资源名,热点规则依赖于注解

    image.png
    image.png

    image.png

    参数索引就是入参的下标,就是接口的入参位置,参数为0代表的是接口的入参从左往右第一个参数
    单机阈值3 和统计窗口时长为1 的意思是 允许你一秒之内有3个请求过来.

    参数类型只能有7种数据类型 ,就是上面的图片的红色圆圈里面的内容
    image.png
    上面的图片的意思是当你入参的参数为 3 的时候,允许你一秒之内有1个请求,如果超过1就进行限流

    上面的配置总的来说意思就是: 单机阈值3 和统计窗口时长为1 的意思是 允许你一秒之内有3个请求过来,但是,如果你的入参参数为 3 的时候,允许你一秒之内有1个请求,如果超过1就进行限流
    注意,一定要在这个方法上有 @SentinelResource(value=”资源名”)中 配置的资源名 ,否则不生效.
    image.png

    image.png

    image.png

    image.png

    image.png


    测试:
    image.png