🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 1. 按照资源名称限流 步骤如下: **1. 资源代码** ```java @RestController public class RateLimitController { /** * 如果是通过url地址 /byResource 进行限流,则为按照url地址限流。 * 如果是通过SentinelResource设置的资源名称 byResource 进行限流,则为按照资源名称限流。 * value="byResource"的命名不要求与 /byResource 相同,但要求全局唯一。 */ @GetMapping("/byResource") @SentinelResource(value = "byResource", blockHandler = "handleException") public String byResource() { return "result:{code: 200, message: 按资源名称限流测试OK}"; } /** * 当byResource方法发生限流时该方法就会被自动调用 */ public String handleException(BlockException exception) { return "result:{code: 444, message:"+exception.getClass().getCanonicalName(); } } ``` **2. 流控规则** ![](https://img.kancloud.cn/ec/bd/ecbde14c432f445e9b111060c4b6443a_850x404.png) **3. 演示效果** 在1s内没有超过1次请求不被限流,当在1s内发出超过1次的请求后被限流,`handleException`方法被调用。 ![](https://img.kancloud.cn/ea/1d/ea1da1464756d3dd96be206e0aba4229_1256x252.gif) <br/> # 2. 按照url地址限流 按照url地址限流,则限流处理采用Sentinel默认的处理信息。将资源名改成url地址即可,如将上面的`byResource`改成`/byResource`,便是按照url地址限流,默认得到的处理信息如下。 ![](https://img.kancloud.cn/06/cf/06cf202431aeb81b0985afe37b06aa19_1229x267.png) <br/> # 3. 自定义限流处理逻辑 `blockHandler`定义的限流处理方法必须与业务代码耦合在一块,导致代码膨胀。所以我们需要将限流处理方法抽取出来放在其他类中。 <br/> 步骤如下: **1. 自定义限流处理类** ```java import com.alibaba.csp.sentinel.slots.block.BlockException; public class Customerhandler { public static String handleException(BlockException exception) { return "result:{code: 444, message:" + exception.getClass().getCanonicalName(); } } ``` **2. 指定具体处理类和具体处理方法** ```java @RestController public class RateLimitController { @GetMapping("/rateLimit/customerBlockHandler") @SentinelResource(value = "customerBlockHandler", blockHandlerClass = Customerhandler.class, //指定具体处理类 blockHandler = "handleException") //指定Customerhandlerl类中的处理方法 public String customerBlockHandler() { return "result:{code: 200, message: 按资源名称限流测试OK}"; } } ``` **3. 限流规则** :-: ![](https://img.kancloud.cn/01/bf/01bf6920e318a4aa6151a638c23269ac_844x367.png) **4. 演示效果** 在1s内没有超过1次请求没有被限流,1s内超过1次请求后被限流,`handleException`方法被调用。 ![](https://img.kancloud.cn/a7/82/a782dfb8593a3771c74644b466cbbd18_1256x252.gif)