Resilience4j and Spring Actuator - 开路查杀服务
Resilience4j and Spring Actuator - Open circuit killing service
我已将以下依赖项添加到我的 Spring 启动项目
implementation 'io.github.resilience4j:resilience4j-spring-boot2:0.14.1'
当断路器打开时,我在 actuator/health 端点上收到以下响应,状态代码为 503 服务不可用:
{
"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
您需要 return Health.up()
或 Health.unknown()
以避免来自 /health
端点的 503。
2) 禁用 resilience4j 的健康指示器并从指标执行器端点获取相同的信息。
从 1.2.0 you can set the allowHealthIndicatorToFail 到 false
。
我已将以下依赖项添加到我的 Spring 启动项目
implementation 'io.github.resilience4j:resilience4j-spring-boot2:0.14.1'
当断路器打开时,我在 actuator/health 端点上收到以下响应,状态代码为 503 服务不可用:
{
"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
您需要 return Health.up()
或 Health.unknown()
以避免来自 /health
端点的 503。
2) 禁用 resilience4j 的健康指示器并从指标执行器端点获取相同的信息。
从 1.2.0 you can set the allowHealthIndicatorToFail 到 false
。