熔断的核心是熔断器CircuitBreaker,想要使用熔断服务,需要先获取熔断器的实例。resilience4j提供了两种方式来获取熔断器:通过注册工具获取,以及通过熔断器的静态方法直接获取。这里推荐使用注册工具获取,优点有两个,一方面可以避免重复定制熔断器配置;另一方面便于熔断器实例的管理,避免出现重复创建的情况。
1、通过注册工具获取
resilience4j提供了一个注册工具CircuitBreakerRegistry,用来注册和管理熔断器的实例。CircuitBreakerRegistry的存储是基于ConcurrentHashMap来实现的,可以保证并发情况下的线程安全。
2、生成熔断器配置:
熔断器配置CircuitBreakerConfig相关的内容可以参考文章:CircuitBreakerConfig。这里提供一个定制化熔断器配置的例子:
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(50)
.waitDurationInOpenState(Duration.ofMillis(1000))
.ringBufferSizeInHalfOpenState(2)
.ringBufferSizeInClosedState(2)
.recordExceptions(IOException.class, TimeoutException.class)
.ignoreExceptions(BusinessException.class, OtherBusinessException.class)
.enableAutomaticTransitionFromOpenToHalfOpen()
.build();