@CircuitBreaker 注解找不到
Resilience4J服务断路器
1)Hystrix,这个断路器是SpringCloud中最早支持的一种容错方案,现在这个断路器已经处于维护状态,已经不再更新了,Resilience4J 是 Hystrix的替代方案
Resilience4J的可用性功能:
1)resilience4j-circuitbreaker:熔断
2)resilience4j-ratelimiter:限流
3)resilience4j-bulkhead:隔离
4)resilience4j-retry:自动重试
5)resilience4j-cache:结果缓存
6)resilience4j-timelimiter:超时处理
在使用Resilience4j的过程中,不需要引入所有的依赖,只引入需要的依赖即可。
服务熔断降级的操作步骤配置
1、添加依赖
<!-- 基于 springboot 2.3.12 版本进行测试-->
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.7.0</version> <!-- 请根据实际版本调整 -->
</dependency>
2、yaml配置
#熔断机制
resilience4j.circuitbreaker:
configs:
default:
# 熔断器打开的失败阈值50%
failureRateThreshold: 50
# 默认滑动窗口大小,circuitbreaker使用基于计数和时间范围欢动窗口聚合统计失败率
slidingWindowSize: 10
# 计算比率的最小值,和滑动窗口大小去最小值,即当请求发生5次才会计算失败率
minimumNumberOfCalls: 5
# 滑动窗口类型,默认为基于计数的滑动窗口
slidingWindowType: TIME_BASED
# 半开状态允许的请求数
permittedNumberOfCallsInHalfOpenState: 3
# 是否自动从打开到半开
automaticTransitionFromOpenToHalfOpenEnabled: true
# 熔断器从打开到半开需要的时间 (这个时间需要 设置的大一点 如果太小熔断效果看不来)
waitDurationInOpenState: 10s
recordExceptions:
- java.lang.Exception
instances:
backendA:
baseConfig: default
3、代码测试
@RestController
public class DemoController {
/**
* resilience4j 测试降级熔断
*/
@GetMapping("/demo/{id}")
@CircuitBreaker(
name = "backendA", //这个和 yaml中的实例需要一致
fallbackMethod = "circuitbreakerfallback" //这个和降级的方法名称需要一致
)
public String find(@PathVariable("id")Integer id){
if (id < 10) {
throw new RuntimeException();
}
return "ok";
}
// 降级方法 (这个方法需要、需要添加Exception e 这个参数 )
public String circuitbreakerfallback(Integer id,Exception e){
return "降级方法";
}
}
说明:
如果是引入这个依赖
<!-- 引入断路器依赖resilience4j -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
这个注解 @CircuitBreaker 这个注解找不到、可能是使用版本问题(网上的jdk 是17 可能是springboot 3.x 版本)
这里的依赖要是springboot 2.0 兼容版本
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.7.0</version> <!-- 请根据实际版本调整 -->
</dependency>