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的代码创建自定义HealthIndicatorhttps://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 allowHealthIndicatorToFailfalse