Resilience4j和弹簧执行器-开路停电服务

时间:2019-04-23 13:47:48

标签: spring-boot-actuator resilience4j

我在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属性可以解决此问题,但这会删除执行器上的断路器统计信息,我仍然希望看到它。

4 个答案:

答案 0 :(得分:1)

1.2.0起,您可以为此将allowHealthIndicatorToFail设置为false

答案 1 :(得分:0)

我可以想到两种可能性。

1)根据resilience4j的代码创建自定义HealthIndicatorhttps://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