springboot配置resilience4j全过程
作者:wfh小黑屋里的小黄花
springboot配置resilience4j
resilience4j-ratelimiter:流量控制
单位时间内,控制访问方法的数量
yml配置:
resilience4j.ratelimiter:
instances:
backendA: # 名称
limit-for-period: 3 #限制连续请求3次
limit-refresh-period: 1s #1s刷新统计值
timeout-duration: 5s #超时等待时长
backendB: # 名称
limit-for-period: 5 #限制连续请求5次
limit-refresh-period: 1s #1s刷新统计值
timeout-duration: 10s #超时等待时长使用:
@RateLimiter(name = "backendA")
resilience4j-retry:重试
异常重试
resilience4j.retry:
instances:
backendA:
max-retry-attempts: 3 # 重试次数
wait-duration: 600 # 重试等待时间
# 判断异常是否需要重试
retryExceptionPredicate: com.test.manager.exception.RecordFailurePredicate
retry-exceptions: # 需要重试的异常
- java.net.SocketTimeoutException
- java.io.IOException
ignore-exceptions: # 重试忽略的异常
- io.github.robwin.exception.BusinessExceptionRecordFailurePredicate:
class RecordFailurePredicate : Predicate<Throwable> {
/**
* 判断是否需要重试
*
* @param t 异常
* @return
*/
override fun test(t: Throwable): Boolean {
// 返回true --> 重试,返回false-->不重试
return true
}
}使用:
@Retry(name = "backendA")
springboot项目如何简单整合Resilience4j
Resilience4j是一个针对Java 8和以上版本的轻量级容错库,它提供了一系列的容错功能,例如断路器、限流、重试等。这些功能可以帮助开发人员更好地保护应用程序免受故障、延迟和错误的影响。
在Spring Boot项目中整合Resilience4j非常方便,只需要添加相应的依赖,然后使用注解或者编程方式来配置并启用所需的Resilience4j功能即可。
添加依赖
1. 在pom.xml文件中添加以下依赖:
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.7.0</version>
</dependency>此外,还需要根据需要添加其他Resilience4j模块的依赖,例如resilience4j-circuitbreaker、resilience4j-retry等。
2. 配置Resilience4j功能
可以通过注解或者编程方式配置Resilience4j功能。
例如,要在应用程序中启用断路器功能,可以使用@CircuitBreaker注解进行配置:
@Service
public class MyService {
@CircuitBreaker(name = "myService", fallbackMethod = "fallback")
public String doSomething() {
// ...
代码逻辑
}
public String fallback(Throwable t) {
// ...
回调逻辑
}
}
//在上面的示例中,
@CircuitBreaker注解将MyService.doSomething()方法标记为使用名为myService的断路器功能,并指定了一个回退方法fallback()。
3. 启用Resilience4j功能
可以通过在Spring Boot配置文件中添加相应的属性来启用Resilience4j功能。
例如,在application.yml文件中添加以下属性可以启用Resilience4j的断路器功能(示例如下):
resilience4j:
circuitbreaker:
configs:
default:
registerHealthIndicator: true # 是否启用健康检查
ringBufferSizeInClosedState: 5 # 断路器关闭时环形缓冲区大小
ringBufferSizeInHalfOpenState: 3 # 断路器半开时环形缓冲区大小
waitDurationInOpenState: 10s # 断路器打开后等待时间
failureRateThreshold: 50 # 失败率阈值
minimumNumberOfCalls: 10 # 最小请求数
permittedNumberOfCallsInHalfOpenState: 3 # 断路器半开时允许的请求数
instances:
backendService:
circuitBreakerConfig: default # 引用 default 已定义的配置
registerHealthIndicator: true # 是否启用健康检查4. 配置全局的异常处理器
如果要统一处理 Resilience4j 的异常的话,可以配置一个全局的异常处理器,将它们捕获并处理。
示例配置如下:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {
CircuitBreakerOpenException.class,
BulkheadFullException.class,
RateLimiterFullException.class,
RequestNotPermitted.class,
RetryException.class
})
public ResponseEntity<Object> handleResilience4jExceptions(Exception ex) {
// 处理 Resilience4j 异常
}
}
//这里通过 @ControllerAdvice 注解声明了一个全局异常处理器,
并使用 @ExceptionHandler 注解指定要处理的 Resilience4j 异常。此外,还可以通过编程方式启用Resilience4j功能。
例如,在Application类中添加以下代码可以自动检测并注册所有带有@CircuitBreaker注解的服务:
@EnableCircuitBreaker
@SpringBootApplication
public class Application {
// ...
}这就是在Spring Boot项目中整合Resilience4j的基本步骤。当然,还可以根据需要进行更详细的配置和定制。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
