SpringCloudAlibaba:Sentinel热点规则

x33g5p2x  于2021-10-29 转载在 Spring  
字(1.0k)|赞(0)|评价(0)|浏览(691)

一、介绍

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

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

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

二、代码测试

1.新建Controller

  1. @RestController
  2. public class HotkeyController {
  3. /** * SentinelResource: sentinel相关配置,value唯一,blockHandler回调方法 */
  4. @GetMapping("/hotkey")
  5. @SentinelResource(value = "hotkey",blockHandler = "dealHotkey")
  6. public String hotkey(@RequestParam(value = "key",required = false) String key){
  7. return "hello hotkey, O(∩_∩)O";
  8. }
  9. public String dealHotkey(String key, BlockException e){
  10. return "调用失败, o(╥﹏╥)o";
  11. }
  12. }

然后启动项目,访问一下接口出现,sentinel的控制台

2.新建热点规则

解释:资源名为@SentinelResource的value值,阈值是qp的值,统计时长是发生后1秒内降级。

这里的参数索引是对应的是第几个参数,例如http://localhost:8005/hotkey?key=sentinel这里的key就是第0个参数。

这里的单机阈值0的意思是只要一访问,就直接触发降级业务。如果这里单机阈值设置为3,这快速点击四次后后才触发降级业务

3.测试

调用:http://localhost:8005/hotkey

调用http://localhost:8005/hotkey?key=sentinel频繁时:

4.参数例外项

期望当key为phone时qps为100,剩下的为1

狂点后仍然返回正确的行为:

http://localhost:8005/hotkey?key=phone

相关文章