如何从 application.properties 创建断路器配置?

Sai*_*man 7 java circuit-breaker spring-boot hystrix resilience4j

我有以下配置,用于在运行时创建断路器:


@Configuration
public class CircuitBreakerConfiguration
{

    public final static String DEFAULT_CIRCUIT_BREAKER_REGISTRY = "DEFAULT_CIRCUIT_BREAKER_REGISTRY";

    private CircuitBreakerConfig getCircuitBreakerConfig()
    {
        return CircuitBreakerConfig.custom()
                .failureRateThreshold(10)
                .waitDurationInOpenState(Duration.ofMillis(30000))
                .permittedNumberOfCallsInHalfOpenState(2)
                .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
                .slidingWindowSize(5)
                .automaticTransitionFromOpenToHalfOpenEnabled(true)
                .recordExceptions(CheckAvailabilityException.class)
                .build();

    }

    @Bean
    @Qualifier(DEFAULT_CIRCUIT_BREAKER_REGISTRY)
    public CircuitBreakerRegistry getCircuitBreakerRegistry()
    {
        return CircuitBreakerRegistry.of(getCircuitBreakerConfig());
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将这些配置移至我的application.properties文件中。

我尝试了以下方法来覆盖默认配置:

resilience4j.circuitbreaker.configs.default.sliding-window-size=10
resilience4j.circuitbreaker.configs.default.sliding-window-type=COUNT_BASED
resilience4j.circuitbreaker.configs.default.failure-rate-threshold=50
resilience4j.circuitbreaker.configs.default.wait-duration-in-open-state=30s
resilience4j.circuitbreaker.configs.default.permitted-number-of-calls-in-half-open-state=2
resilience4j.circuitbreaker.configs.default.automatic-transition-from-open-to-half-open-enabled=true
resilience4j.circuitbreaker.configs.default.record-exceptions=com.example.web.domain.checkavailability.exceptions.CheckAvailabilityException
Run Code Online (Sandbox Code Playgroud)

但是,这似乎也没有覆盖默认配置。

小智 5

不知道这是否仍然是一个开放的话题,但我一直在努力解决类似的问题,并设法找到这篇文章,它提供了一些指导:https://heapsteep.com/13- Circuit-breaker-resilience4j/

因此,这就是我所做的:

  1. 创建我想要的默认配置:
resilience4j.circuitbreaker.configs.default.register-health-indicator=true
resilience4j.circuitbreaker.configs.default.permitted-number-of-calls-in-half-open-state=3
resilience4j.circuitbreaker.configs.default.sliding-window-type=TIME_BASED
resilience4j.circuitbreaker.configs.default.minimum-number-of-calls=50
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个我将在注释中使用的实例,并像这样设置它:
resilience4j.circuitbreaker.instances.myInstance.baseConfig=default
Run Code Online (Sandbox Code Playgroud)
  1. 注释你的方法:
    @Override
    @CircuitBreaker(name = "myInstance", fallbackMethod = "fallbackmethod")
    public String getName(int ID) {
        \\ ...
    }
Run Code Online (Sandbox Code Playgroud)

我一直使用 @Retry 函数来休息这个设置,但我认为它的工作方式是相同的。