Bug1 自定義被限流的後續操作@SentinelResource(blockHandler = "blockHandler"),其中blockHandler處理函數不執行 前置條件 //定義的資源 @GetMapping("/resource") @SentinelResource(value = ...
Bug1
自定義被限流的後續操作@SentinelResource(blockHandler = "blockHandler"),其中blockHandler處理函數不執行
前置條件
//定義的資源
@GetMapping("/resource") @SentinelResource(value = "/resource", blockHandler = "blockHandler") public String resource(int a){ return "resourcce" + a; } public String blockHandler(int a, BlockException e) { return "被限流了..." + a + e.getMessage(); }
定義好資源和流控規則之後,如果每秒訪問超過2個請求,那麼就會觸發流控,從而應該執行 blockHandler(int a, BlockException e) 方法,但是實際情況是即使觸發了流控規則依然提示的是
並沒有觸發blockHandler方法,後來我又去仔細看了一下文檔,顯示如下,發現返回值、訪問範圍、參數要求都一致,但就是不執行該方法。
我又去翻看了一下文檔發現了一個案例,如下
我對照了一下我的代碼發現,與這個案例的不同只有資源的定義名稱了,我的資源定義的是“/resource”,難不成是因為多了一個“/”的原因?
發現問題之後把資源名稱改成了“resource”,再重啟服務,定義流控規則,再嘗試一遍發現成功了,能執行blockHandler方法了。最後附上代碼
@GetMapping("/resource") @SentinelResource(value = "resource", blockHandler = "blockHandler") public String resource(int a){ return "resourcce" + a; } public String blockHandler(int a, BlockException e) { return "被限流了..." + a + e.getMessage(); }