关闭 Akka HTTP 应用程序

10 浏览
0 Comments

关闭 Akka HTTP 应用程序

我有一个正在运行的Akka HTTP应用程序,我想要关闭它。在SBT中按下Ctrl + C 对我没有效果(我当前使用的是Git Bash for Windows命令行)。有没有推荐的优雅关闭Akka应用程序的方式?

0
0 Comments

根据给出的内容,我们可以整理出以下文章:

Shut down Akka HTTP app的原因和解决方法

在这个问题中,作者想要实现一个关闭Akka HTTP应用程序的功能。他参考了一个论坛帖子,并添加了一个路由,用于关闭应用程序。具体的代码如下:

def shutdownRoute: Route = path("shutdown") {
  Http().shutdownAllConnectionPools() andThen { case _ => system.terminate() }
  complete("Shutting down app")
}

在这段代码中,`system`代表应用程序的`ActorSystem`。

有了这个路由,作者可以通过以下命令来关闭应用程序:

curl http://localhost:5000/shutdown

然而,编辑者提出了一个问题,他认为在生产代码中远程关闭服务器并不是一个好主意。在评论中,Henrik提到了另一种关闭服务器的方法,即在SBT控制台中按下`Enter`键:

StdIn.readLine()
// Unbind from the port and shut down when done
bindingFuture
  .flatMap(_.unbind())
  .onComplete(_ => system.terminate())

为了更好地理解上述代码,作者将其放置在服务器初始化的末尾。在初始化过程中,作者从配置文件中获取主机和端口信息,并创建了一个HTTP路由。然后,他通过`Http().bindAndHandle()`方法启动了HTTP服务器。同时,作者还创建了一个日志记录器,并在绑定完成后打印服务器绑定的地址。最后,作者提示用户按下回车键来停止应用程序,并在用户按下回车键后解除端口绑定并关闭系统。

在这个例子中,作者展示了通过按下回车键来退出的一种类似方式,使用了相同的方法调用。这种方式可能更适合在运行应用程序的机器上进行简单的物理访问。

总结起来,通过以上内容,我们了解到了关闭Akka HTTP应用程序的两种方法:通过发送HTTP请求和通过控制台按下回车键。具体的实现代码也在文章中给出。

0