in pekko-sample-sharding-scala/killrweather/src/main/scala/sample/killrweather/WeatherHttpServer.scala [17:47]
def start(routes: Route, port: Int, system: ActorSystem[_]): Unit = {
import org.apache.pekko.actor.typed.scaladsl.adapter._
implicit val classicSystem: classic.ActorSystem = system.toClassic
val shutdown = CoordinatedShutdown(classicSystem)
import system.executionContext
Http().bindAndHandle(routes, "localhost", port).onComplete {
case Success(binding) =>
val address = binding.localAddress
system.log.info(
"WeatherServer online at http://{}:{}/",
address.getHostString,
address.getPort)
shutdown.addTask(
CoordinatedShutdown.PhaseServiceRequestsDone,
"http-graceful-terminate") { () =>
binding.terminate(10.seconds).map { _ =>
system.log.info(
"WeatherServer http://{}:{}/ graceful shutdown completed",
address.getHostString,
address.getPort)
Done
}
}
case Failure(ex) =>
system.log.error("Failed to bind HTTP endpoint, terminating system", ex)
system.terminate()
}
}