CircuitBreaker-Resilience4J
---------------------------------------------------------------------------------------- ################### spring cloud CircuitBreaker-Resilience4J ######################################### 服务熔断 服务降级 服务限流 服务限时 服务预热 按近实时的监控 兜底的处理动作 @RestController public class PayCircuitController { //=========Resilience4j CircuitBreaker 的例子 @GetMapping(value = "/pay/circuit/{id}") public String myCircuit(@PathVariable("id") Integer id) { if(id == -4) throw new RuntimeException("----circuit id 不能负数"); if(id == 9999) { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } } return "Hello, circuit! inputId: "+id+" \t " + IdUtil.simpleUUID(); } } @FeignClient(value = "cloud-payment-service") public interface PayFeignApi { @GetMapping(value = "/pay/circuit/{id}") public String myCircuit(@PathVariable("id") Integer id); } <!--resilience4j-circuitbreaker--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId> </dependency> <!-- 由于断路保护等需要AOP实现,所以必须导入AOP包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> spring: cloud: openfeign: circuitbreaker: enabled: false group: enabled: true #没开分组永远不用分组的配置。精确优先、分组次之(开了分组)、默认最后 # Resilience4j CircuitBreaker 按照次数:COUNT_BASED 的例子 # 6次访问中当执行方法的失败率达到50%时CircuitBreaker将进入开启OPEN状态(保险丝跳闸断电)拒绝所有请求。 # 等待5秒后,CircuitBreaker 将自动从开启OPEN状态过渡到半开HALF_OPEN状态,允许一些请求通过以测试服务是否恢复正常。 # 如还是异常CircuitBreaker 将重新进入开启OPEN状态;如正常将进入关闭CLOSE闭合状态恢复正常处理请求。 resilience4j: circuitbreaker: configs: default: failureRateThreshold: 50 #设置50%的调用失败时打开断路器,超过失败请求百分⽐CircuitBreaker变为OPEN状态。 slidingWindowType: COUNT_BASED # 滑动窗口的类型 slidingWindowSize: 6 #滑动窗⼝的⼤⼩配置COUNT_BASED表示6个请求,配置TIME_BASED表示6秒 minimumNumberOfCalls: 6 #断路器计算失败率或慢调用率之前所需的最小样本(每个滑动窗口周期)。如果minimumNumberOfCalls为10,则必须最少记录10个样本,然后才能计算失败率。如果只记录了9次调用,即使所有9次调用都失败,断路器也不会开启。 automaticTransitionFromOpenToHalfOpenEnabled: true # 是否启用自动从开启状态过渡到半开状态,默认值为true。如果启用,CircuitBreaker将自动从开启状态过渡到半开状态,并允许一些请求通过以测试服务是否恢复正常 waitDurationInOpenState: 5s #从OPEN到HALF_OPEN状态需要等待的时间 permittedNumberOfCallsInHalfOpenState: 2 #半开状态允许的最大请求数,默认值为10。在半开状态下,CircuitBreaker将允许最多permittedNumberOfCallsInHalfOpenState个请求通过,如果其中有任何一个请求失败,CircuitBreaker将重新进入开启状态。 recordExceptions: - java.lang.Exception instances: cloud-payment-service: baseConfig: default @RestController public class OrderCircuitController { @Resource private PayFeignApi payFeignApi; @GetMapping(value = "/feign/pay/circuit/{id}") @CircuitBreaker(name = "cloud-payment-service", fallbackMethod = "myCircuitFallback") public String myCircuitBreaker(@PathVariable("id") Integer id) { return payFeignApi.myCircuit(id); } //myCircuitFallback就是服务降级后的兜底处理方法 public String myCircuitFallback(Integer id,Throwable t) { // 这里是容错处理逻辑,返回备用结果 return "myCircuitFallback,系统繁忙,请稍后再试-----/(ㄒoㄒ)/~~"; } } http://localhost/feign/pay/circuit/11 http://localhost/feign/pay/circuit/-4 CircuitBreakerConfig 隔离保护 http://localhost/feign/pay/bulkhead/11 http://localhost/feign/pay/circuit/-4 http://localhost/feign/pay/circuit/9999 http://localhost/feign/pay/ratelimit/1 ----------------------------------------------------------------------------------------
posted on 2025-12-21 21:26 yebinghuai-qq-com 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号