天天看點

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

修改cloudalibaba-sentinel-service8401子產品

添加依賴(添加commons依賴,自定義的entity model)

<dependency>
        <groupId>org.cjd</groupId>
        <artifactId>cloud-api-commons</artifactId>
</dependency>
           

在controller中添加業務

@RestController
    @Slf4j
    public class RateLimitController {
        
        @GetMapping("/byResource")
        @SentinelResource(value = "byResourceQWER", blockHandler = "handlerException")
        public CommonResult byResource(){
            
            return new CommonResult(200, "按資源名稱限流測試OK", new Payment(2020L, "serial001"));
        }
        public CommonResult handlerException(BlockException e){
            return new CommonResult(404, e.getClass().getCanonicalName()+"\t 服務不可用");
        }
    }
           

新增限流規則:按資源名進行限流, @SentinelResource(value = “byResourceQWER”, blockHandler = “handlerException”)名稱為value的值

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

測試

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

預設的url限流:即getmapping路徑

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

新增流控規則

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

測試

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

總結

  • 通過注解(資源名)指定名字,可以指定方法進行後續處理,即轉到自定義方法處理
  • 直接流控路徑無自定義兜底方法,會直接調用預設的界面

自定義兜底方法與業務類解耦

如果我們要為接口添加自定義的兜底方法,這個處理方法又要和業務代碼耦合在一起,一多就很臃腫

可以通過建立自定義限流類來解耦

建立自定義限流類

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

在業務類中補充完整注解

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

測試(添加限流規則之後)

SpringCloudAlibaba——Sentinel(@SentinelResource執行個體)

繼續閱讀