Resilience4j и Spring Actuator - Сервис по уничтожению разомкнутой цепи
Я добавил следующую зависимость в мой проект Spring Boot
implementation 'io.github.resilience4j:resilience4j-spring-boot2:0.14.1'
Когда размыкается автоматический выключатель, я получаю следующий ответ на мою конечную точку привода / работоспособности с кодом состояния 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
свойство, чтобы обойти эту проблему, но это удаляет статистику выключателя из привода, который я все еще хотел бы видеть.
3 ответа
Я могу думать о двух возможностях.
1) Создать кастом HealthIndicator
на основе кода resilience4j: 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()
чтобы избежать 503 от /health
конечная точка.
2) Отключите индикатор работоспособности resilience4j и получите ту же информацию из конечной точки привода метрики.
Начиная с версии 1.2.0 вы можете установить для allowHealthIndicatorToFail значениеfalse
за это.
Вам просто нужно настроить Spring Boot2 следующим образом:
management.health.status.http-mapping.DOWN=200
Нет, вам просто нужно правильно настроить Spring Boot2.
management.health.status.http-mapping.DOWN=200