本文共 2435 字,大约阅读时间需要 8 分钟。
Sentinel管控台通过@SentinelResource注解实现服务限流和熔断降级功能。其核心组件包括blockHandler和fallback,分别负责限流降级和熔断降级。
通过在控制器中自定义单个或多个限流降级处理方法,可以实现流量控制。以下是控制器示例代码:
@RestControllerpublic class MyController { @SentinelResource(value = "/test") public String test() { return "正常调用"; } @SentinelResource(value = "/test", blockHandler = "blockHandlerA") public String testBlock() { return "触发限流降级"; }} sentinel配置流控规则如下:
sentinel: resource: "/test": blockHandler: blockHandlerA
当一秒一次点击时,不会触发限流降级。当快速点击超过阈值时,会调用自定义限流降级方法。
为了提升代码可读性,可以将限流降级逻辑封装到独立类中。以下是示例代码:
package com.example.sentinel.blockHandlerClass;import com.alibaba.csp.sentinel.slots.block.BlockException;public class BlockHandler { public static String blockHandlerA(BlockException exception) { return "这是第一个限流降级方法"; }} 在控制器中使用类似方式调用:
@SentinelResource(value = "/test", blockHandler = "BlockHandler.blockHandlerA")public String testBlock() { return "触发限流降级";} 通过在控制器中自定义单个或多个熔断降级处理方法,可以实现服务熔断。以下是控制器示例代码:
@RestControllerpublic class MyController { @SentinelResource(value = "/test", fallback = "fallbackA") public String test() { return "正常调用"; } @SentinelResource(value = "/test", fallback = "fallbackB") public String testFallback() { return "触发熔断降级"; }} sentinel配置流控规则如下:
sentinel: resource: "/test": fallback: fallbackB
当调用接口后台异常时,会调用自定义熔断降级方法。
同样可以将熔断降级逻辑封装到独立类中。以下是示例代码:
package com.example.sentinel.fallback;import com.alibaba.csp.sentinel.slots.block.BlockException;public class Fallback { public static String fallbackA() { return "这是第一个熔断降级方法"; }} 在控制器中使用类似方式调用:
@SentinelResource(value = "/test", fallback = "Fallback.fallbackB")public String testFallback() { return "触发熔断降级";} @RestControllerpublic class MyController { @SentinelResource(value = "/test", blockHandler = "BlockHandler.blockHandlerA", fallback = "Fallback.fallbackB") public String test() { return "正常调用"; }} sentinel: resource: "/test": blockHandler: BlockHandler.blockHandlerA fallback: Fallback.fallbackB
转载地址:http://wbhfk.baihongyu.com/