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的值

測試
預設的url限流:即getmapping路徑
新增流控規則
測試
總結
- 通過注解(資源名)指定名字,可以指定方法進行後續處理,即轉到自定義方法處理
- 直接流控路徑無自定義兜底方法,會直接調用預設的界面
自定義兜底方法與業務類解耦
如果我們要為接口添加自定義的兜底方法,這個處理方法又要和業務代碼耦合在一起,一多就很臃腫
可以通過建立自定義限流類來解耦
建立自定義限流類
在業務類中補充完整注解
測試(添加限流規則之後)