多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
**1. 资源代码** ```java @RestController public class RateLimitController { @GetMapping("/protectd/strategy/{code}") @SentinelResource(value = "protectd-strategy" , blockHandlerClass = Customerhandler.class , blockHandler = "handleLimit" //当发生限流时调用该处理方法 , fallbackClass = Customerhandler.class , fallback = "handleFallback") //当发生异常时调用该处理方法 public String protectdStrategy(@PathVariable("code") int code) throws Exception { if (code == 1) { throw new Exception("code等于1,发生异常了!"); } return "正常情况!"; } } ``` **2. 自定义的处理类** ```java public class Customerhandler { public static String handleLimit(int code, BlockException exception) { return "handleLimit---code:" + code + "---message: " + exception.getClass().getCanonicalName(); } public static String handleFallback(int code, Throwable e) { return "handleFallback---code:" + code + "---message: " + e.getMessage(); } } ``` **3. 测试结果** 以较慢的速度访问 http://localhost:8401//protectd/strategy/1 ,只发生异常,`handleFallback`被调用来处理异常。 ![](https://img.kancloud.cn/b6/a8/b6a8e0cd5fcc5cf45773fff611975e55_1347x198.png) 我设置限流规则为1s只能处理一次请求,当快速访问 http://localhost:8401//protectd/strategy/1 ,虽然也有异常发生,但是只有处理限流的方法`handleLimit`被调用。 ![](https://img.kancloud.cn/4e/c0/4ec0f054523a04de4f36b292d9d5128b_1241x190.png)