Проверка работоспособности Akka http с более чем одним bindAndHandle - PullRequest
0 голосов
/ 27 ноября 2018

При наличии одного 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 ()

Все работает хорошо, но кажется, что я что-то упустил.Есть ли лучший подход к реализации такой проверки здоровья?

...