Я пытаюсь настроить проверки работоспособности Actuator, чтобы включить проверки внешней службы, вложенной за пределы первого уровня. Например, при вызове /actuator/health доступны следующие индикаторы работоспособности:
{
"status":"DOWN",
"components":{
"jms":{
"status":"DOWN",
"components":{
"broker1":{
"status":"DOWN",
"details":{
"error":"javax.jms.JMSException: Failed to create session factory"
}
},
"broker2":{
"status":"UP",
"details":{
"provider":"ActiveMQ"
}
}
}
},
"livenessState":{
"status":"UP"
},
"readinessState":{
"status":"UP"
}
},
"groups":[
"liveness",
"readiness"
]
}
В компоненте jms есть два брокера — broker1 и broker2. Я могу настроить Actuator для включения jms в группу готовности, например:
endpoint:
health:
probes:
enabled: true
enabled: true
show-details: always
group:
readiness:
include: readinessState, jms
Но это будет включать всех брокеров в тесте готовности.
При вызове /actuator/health/readiness я получаю:
{
"status":"DOWN",
"components":{
"jms":{
"status":"DOWN",
"components":{
"broker1":{
"status":"DOWN",
"details":{
"error":"javax.jms.JMSException: Failed to create session factory"
}
},
"broker2":{
"status":"UP",
"details":{
"provider":"ActiveMQ"
}
}
}
},
"readinessState":{
"status":"UP"
}
}
}
Поскольку проверка готовности в Kubernetes предотвращает только перенаправление веб-запросов в мой модуль, у меня есть случаи, когда я могу обработать запрос, если broker1 не работает, пока broker2 работает. Есть ли способ настроить Actuator для включения вложенных индикаторов работоспособности в группу работоспособности, а не только корневых? Я пробовал такие комбинации, как Broker1, jms.broker1, jms/broker1, jms\broker1 безрезультатно.
Если он не поддерживается напрямую через конфигурацию, могу ли я создать пользовательский компонент, который даст мне желаемое поведение. Например, я думал о возможности написания пользовательского CompositeHealthContributor, но не уверен, что смогу агрегировать существующие показатели здоровья. Я не хочу повторять проверки работоспособности, которые уже проводятся.
Еще один связанный вариант использования — считать службу работоспособной, пока доступен один из группы внешних ресурсов. Например, у меня есть идентичный брокер в двух дата-центрах. Пока один из брокеров доступен, мой сервис можно считать исправным. Что было бы хорошим подходом для этого варианта использования?