spring boot 2 集成 resilience4j

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot 2 集成 resilience4j相关的知识,希望对你有一定的参考价值。

参考技术A resilience4j 是一款 java 平台轻量级容错库,支持熔断、限流、重试等功能。由于Netflix Hystrix 闭源,我们急需一款功能强大的容错工具库,来保护我们的环境。resilience4j 提供了spring boot 的starter,所以集成resilience4j很简单,但是也有一些坑。因此记录一下。

github: https://github.com/resilience4j/resilience4j

官方文档: https://resilience4j.readme.io/docs/circuitbreaker

我使用的是resilience4j 最新版本 0.16.0,spring boot 2.1.6。

相关依赖

</dependencies>

配置resilience4j,在spring 中的application.yml 中增加如下配置:

resilience4j.circuitbreaker:

instances:

resilience4j.retry:

instances:

resilience4j.bulkhead:

instances:

resilience4j.thread-pool-bulkhead:

instances:

resilience4j.ratelimiter:

instances:

server:

port: 9090

resilience4j 的配置在0.16.0 发生了一下变化。网上一些文档都是基于0.13.0版本。还有0.16.0版本配置不能被IDEA 识别,也不能自动联想,所以使用0.16.0版本尽量参考官网的配置。

配置介绍

注解

@CircuitBreaker(name = "backendA")

code

@Retry(name = "backendA")

@CircuitBreaker(name = "backendA")

@RateLimiter(name = "backendA")

@Service

public class ServiceA



多次失败达到阈值之后,再调用会抛出异常

io.github.resilience4j.circuitbreaker.CallNotPermittedException: CircuitBreaker 'backendA' is OPEN and does not permit further calls

rest 调用返回结果:





这种情况可以配合spring aop,拦截异常,返回特性http 状态码或者信息,让前端捕获特定http 状态码,以此来呈现熔断之后的ui。

配置

注解

@RateLimiter(name = "backendA")

code

同上

达到限制时抛出异常

io.github.resilience4j.ratelimiter.RequestNotPermitted: RateLimiter 'backendA' does not permit further calls

经过试验,当@RateLimiter和@CircuitBreaker一起使用时,需要熔断器增加忽略RequestNotPermitted异常。否则会触发熔断。

ignoreExceptions:

其主要作用是限制并发次数

配置

注解

@Bulkhead(name = "backendA")

重试

配置

注解

@Retry(name = "backendA")

resilience4j 为我们提供了很棒的容错库,简单易用。

以上是关于spring boot 2 集成 resilience4j的主要内容,如果未能解决你的问题,请参考以下文章

Spring-boot 和 Keycloak 集成

Spring-boot 2.3.0.M4 JDK 11 集成 NoSuchBeanDefinitionException ...ConfigurationClassPostProcessor, ...

Spring Boot 2.x 集成 Redis 缓存

Spring Boot 2.6 + 集成 - internalPublisherAnnotationBeanPostProcessor 循环依赖

Spring boot 集成Spring Security

xml spring-boot 2.0 + mybatis + phoneix集成