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/
因此,这就是我所做的:
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)
resilience4j.circuitbreaker.instances.myInstance.baseConfig=default
Run Code Online (Sandbox Code Playgroud)
@Override
@CircuitBreaker(name = "myInstance", fallbackMethod = "fallbackmethod")
public String getName(int ID) {
\\ ...
}
Run Code Online (Sandbox Code Playgroud)
我一直使用 @Retry 函数来休息这个设置,但我认为它的工作方式是相同的。
| 归档时间: |
|
| 查看次数: |
8332 次 |
| 最近记录: |