Sentinel熱點參數限流
何爲熱點?熱點即經常訪問的數據。很多時候我們希望統計某個熱點數據中訪問頻次最高的 Top K 數據,並對其訪問進行限制。比如:
- 商品 ID 爲參數,統計一段時間內最常購買的商品 ID 並進行限制
- 用戶 ID 爲參數,針對一段時間內頻繁訪問的用戶 ID 進行限制
熱點參數限流會統計傳入參數中的熱點參數,並根據配置的限流閾值與模式,對包含熱點參數的資源調用進行限流。熱點參數限流可以看做是一種特殊的流量控制,僅對包含熱點參數的資源調用生效。
示例
//熱點限流
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1", required = false) String p1,
@RequestParam(value = "p2", required = false) String p2) {
return "*****testHotKey";
}
public String deal_testHotKey (String p1, String p2, BlockException exception) {
return "****deal_testHotKey";
}
配置:索引爲第0個的參數(p1)閾值爲1
-
攜帶p1參數快速多次訪問:
超過1秒一次的限制,觸發blockHandler方法。 -
攜帶p2參數快速訪問多次:
一切正常。 -
同時攜帶p1和p2參數快速訪問:
觸發blockHandler方法。
參數例外項
上述案例在訪問超過1秒1個後馬上被限流。但是,我們希望p1參數當它時某個特殊值時,它的限流值和平時不一樣。
比如:當p1=5時,它的閾值可以達到200;其它值仍然爲1
-
攜帶p1=5快速多次訪問:正常
-
攜帶p1=3快速多次訪問:觸發blockHandler方法
注意:
- @SentinelResource處理的是Sentinel控制檯配置的違規情況,有blockHandler方法配置的兜底處理;
- 如果邏輯代碼中出現其它RuntimeException,@SentinelResource是不管的。