我在Spring Boot项目中添加了以下依赖项
implementation 'io.github.resilience4j:resilience4j-spring-boot2:0.14.1'
断路器打开时,我在执行器/运行状况端点上收到以下响应,状态代码为503 Service Unavailable:
{
"status": "DOWN",
"details": {
"diskSpace": {
"status": "UP",
"details": {
"total": 499963174912,
"free": 432263229440,
"threshold": 10485760
}
},
"refreshScope": {
"status": "UP"
},
"getFlightInfoCircuitBreaker": {
"status": "DOWN",
"details": {
"failureRate": "100.0%",
"failureRateThreshold": "2.0%",
"maxBufferedCalls": 1,
"bufferedCalls": 1,
"failedCalls": 1,
"notPermittedCalls": 1,
"state": "OPEN"
}
}
}
}
我的AWS ECS容器运行状况检查使用此终结点来确定其运行状况,并在非200响应时重启容器。
由于我不希望在断路器打开时重新启动服务,是否可以在不导致服务状态下降的情况下将断路器打开?
我知道registerHealthIndicator: false
属性可以解决此问题,但这会删除执行器上的断路器统计信息,我仍然希望看到它。
答案 0 :(得分:1)
自1.2.0起,您可以为此将allowHealthIndicatorToFail设置为false
。
答案 1 :(得分:0)
我可以想到两种可能性。
1)根据resilience4j的代码创建自定义HealthIndicator
:
https://github.com/resilience4j/resilience4j/blob/master/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/health/CircuitBreakerHealthIndicator.java
您需要返回Health.up()
或Health.unknown()
来避免来自/health
端点的503。
2)禁用resilience4j的运行状况指示器,并从度量标准执行器端点获得相同的信息。
答案 2 :(得分:0)
否,您只需要正确配置Spring Boot2。
management.health.status.http-mapping.DOWN=200
答案 3 :(得分:0)
您只需要按以下方式配置Spring Boot2:
management.health.status.http-mapping.DOWN=200