我在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
属性来解决这个问题,但是这会从执行器中删除断路器统计数据,我仍然希望看到它。
我可以想到两种可能性。
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的运行状况指示器,并从指标执行器端点获取相同的信息。
不,你只需要正确配置Spring Boot2。
management.health.status.http-mapping.DOWN=200
您只需按如下方式配置Spring Boot2:
management.health.status.http-mapping.DOWN=200