Module:cloudalibaba-sentinel-service8401
pom新增依賴
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> <groupId>com.atguigu.springcloud</groupId> <artifactId>cloud-api-common</artifactId> <version>${project.version}</version> </dependency>
這個依賴來自自己的模板,這裡的這個依賴就是去資料庫查詢的部分業務處理
新增Controller
@RestController public class RateLimitController { @GetMapping("/byResource") @SentinelResource(value = "byResource",blockHandler = "handleException") public CommonResult byResource() { return new CommonResult(200,"按资源名称限流测试OK",new Payment(2020L,"serial001")); } public CommonResult handleException(BlockException exception) { return new CommonResult(444,exception.getClass().getCanonicalName()+"\t 服务不可用"); } }
#圖形配置和程式碼關係
表示1秒鐘內查詢次數大於1,就跑到我們自訂的處流,限流
測試1
1秒鐘點擊1下,OK
超過上述,瘋狂點擊,返回了自己定義的限流處理信息,限流發生
透過存取的URL來限流,會回傳Sentinel自帶預設的限流處理資訊
Controller修改為:
@RestController public class RateLimitController { @GetMapping("/byResource") @SentinelResource(value = "byResource",blockHandler = "handleException") public CommonResult byResource() { return new CommonResult(200,"按资源名称限流测试OK",new Payment(2020L,"serial001")); } public CommonResult handleException(BlockException exception) { return new CommonResult(444,exception.getClass().getCanonicalName()+"\t 服务不可用"); } @GetMapping("/rateLimit/byUrl") @SentinelResource(value = "byUrl") public CommonResult byUrl() { return new CommonResult(200,"按url限流测试OK",new Payment(2020L,"serial002")); } }
測試2
存取一次
http://localhost:8401/rateLimit/byUrl
正常
瘋狂點擊http://localhost:8401/rateLimit/ byUrl
會傳回Sentinel自帶的限流處理結果
上面兜底方案面臨的問題
1 系統預設的,沒有體現我們自己的業務要求。
2 依照現有條件,我們自訂的處理方法又和業務程式碼耦合在一塊,不直覺。
3 每個業務方法都會增加一個兜底的,那程式碼膨脹加劇。
4 全域統一的處理方法沒有體現。
建立CustomerBlockHandler類別用於自訂限流處理邏輯
測試後我們自訂的出來了
控制類別增加新的業務
@GetMapping("/rateLimit/customerBlockHandler") @SentinelResource(value = "customerBlockHandler", blockHandlerClass = CustomerBlockHandler.class, blockHandler = "handleException2") public CommonResult customerBlockHandler() { return new CommonResult(200,"按客户自定义限流处理逻辑"); }
自訂通用的限流處理邏輯
blockHandlerClass = CustomerBlockHandler.class
blockHandler = handleException2
上述設定:找CustomerBlockHandler類別裡的handleException2方法進行兜底處理定義通用的限流處理邏輯
測試3
測試後我們自訂的出來了
#以上是Java @SentinelResource實例程式碼分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!