При наличии одного Http().bindAndHandle
на услугу легко реализовать маршрут проверки работоспособности и объединить ~
с другими маршрутами.
Однако в моем случае у меня несколько http серверов на службу на разных портах:
for {
_ <- Http().bindAndHandle(routes1, "0.0.0.0", 9090)
_ <- Http().bindAndHandle(routes2, "0.0.0.0", 9091)
} yield ()
Я хочу реализовать HealthCheck, который возвращает информацию о работоспособности всех серверов.
Мой наивный подход заключается в том, чтобы сделать что-то вроде:
def isHealthy(port: Int): Future[Boolean] =
Http().singleRequest(HttpRequest(uri = s"http://0.0.0.0:${port}/healthcheck"))
.map(r => r.status.isSuccess()).recover{ case _ => false }
val healthChecker: Route = pathEndOrSingleSlash {
onComplete(isHealthy(9090) zip isHealthy(9091)) {
x => complete(x.toString)
}
}
for {
_ <- Http().bindAndHandle(routes1, "0.0.0.0", 9090)
_ <- Http().bindAndHandle(routes2, "0.0.0.0", 9091)
_ <- Http().bindAndHandle(healthChecker, "0.0.0.0", 9092)
} yield ()
Все работает хорошо, но кажется, что я что-то упустил.Есть ли лучший подход к реализации такой проверки здоровья?