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();
    }