Обновление Spring Boot 3.X: пользовательский индикатор работоспособности не распознается в группе работоспособности привJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Обновление Spring Boot 3.X: пользовательский индикатор работоспособности не распознается в группе работоспособности прив

Сообщение Anonymous »

В рамках наших усилий по устранению уязвимостей мы обновили наше приложение Spring Boot с последней версии 2.X до 3.X.
Мы используем Spring Actuator для мониторинга и управления наше применение в различных производственных средах. В нашем application.properties у нас есть группа работоспособности, настроенная следующим образом:

Код: Выделить всё

management.health.livenessstate.enabled=true
management.endpoint.health.group.liveness.include=livenessState,rabbitMqState
management.endpoint.health.group.liveness.show-details=always
Хотя проверка «livenessState» предоставляется Spring Actuator, у нас есть собственный индикатор работоспособности для RabbitMQ, представленный следующим компонентом:

Код: Выделить всё

@Bean
public RabbitMqStateHealthIndicator rabbitMqStateHealthIndicator(RabbitMqEndpoint endpoint) {
return new RabbitMqStateHealthIndicator(endpoint);
}
RabbitMqStateHealthIndicator определен во внешней библиотеке и реализует интерфейс HealthIndicator:

Код: Выделить всё

@RequiredArgsConstructor
@Slf4j
public class RabbitMqStateHealthIndicator implements HealthIndicator {
private final RabbitMqEndpoint endpoint;

@Override
public Health health() {

return new Health.Builder()
.status(getStatus())
// Looks like "java.util.concurrent.ThreadPoolExecutor@34e1411[Running, pool size = 1, active threads = 0, queued tasks = 0, completed tasks = 3]"
.withDetail("executor", endpoint.getMessageDispatcher().getTaskExecutor().getThreadPoolExecutor().toString())
.withDetail("isQueueInitializingFailed", endpoint.isQueueInitializingFailed())
.withDetails(getConnectionDetails())
.withDetails(getSessionDetails())
.build();
}

private Status getStatus() {
JmsConnection connection = endpoint.getConnection();
Status result = Status.UP;

// Consider dispatcher healthy while we are disconnected (session.isClosed) to avoid unnecessary restarts.
boolean isDispatcherHealthy = endpoint.getSession().isClosed() ||
endpoint.getMessageDispatcher().allConsumerThreadsAreAlive();

if (connection == null ||
connection.isFailed() ||    // If we have unlimited reconnect attempts, isFailed will always be false
endpoint.isQueueInitializingFailed() ||
!isDispatcherHealthy) {
result = Status.DOWN;
log.warn("""
Returning {} status in health indicator \
[connection is null? {}, connection.isFailed? {}, \
isQueueInitializingFailed? {}, isDispatcherHealthy? {}]\
""",
result,
connection == null,
connection != null && connection.isFailed(),
endpoint.isQueueInitializingFailed(),
isDispatcherHealthy);
}
return result;
}

private Map getConnectionDetails() {
return Optional.ofNullable(endpoint.getConnection()).map(connection -> Map.of(
"connection.isClosed", connection.isClosed(),       // seems to always be false
"connection.isFailed", connection.isFailed(),       // true: when all reconnection attempts failed
"connection.isConnected", connection.isConnected(), // false: when all reconnection attempts failed
"connection.isStarted", connection.isStarted()      // false: when all reconnection attempts failed
))
.orElse(Collections.emptyMap());
}

private Map getSessionDetails() {
return Optional.ofNullable(endpoint.getSession())
// true: when trying to reconnect or when all reconnection attempts failed
.map(session -> Collections.singletonMap("session.isClosed", session.isClosed()))
.orElse(Collections.emptyMap());
}
}
До обновления Spring Boot все работало отлично. Однако после обновления до Spring Boot 3.X при запуске приложения возникает следующая ошибка:

Код: Выделить всё

error - APPLICATION FAILED TO START
Description:
Included health contributor 'rabbitMqState' in group 'liveness' does not exist
Action:
Update your application to correct the invalid configuration.
You can also set 'management.endpoint.health.validate-group-membership' to false to disable the validation.
Учитывая, что эта конфигурация без проблем работала в Spring Boot 2.X, я не уверен, почему она не работает сейчас в 3.X.
Вопросы:
  • Есть ли новый способ регистрации или ссылки на пользовательские индикаторы работоспособности в Spring Boot 3.X?
  • Существуют ли какие-либо дополнительные конфигурации или шаги, необходимые Actuator для распознавания пользовательских индикаторов работоспособности в новой версии?
Мы будем очень признательны за любые идеи или предложения.

Подробнее здесь: https://stackoverflow.com/questions/786 ... uator-live
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»