【发布时间】:2016-11-28 15:07:50
【问题描述】:
我正在开发一个基于 Akka/Play 的集群应用程序,其中前端节点可以被集群隔离。在这种情况下,我想退出 Play 应用程序,以便它可以重新启动并重新加入集群。
我在很多地方读到,优雅地停止播放应用程序的正确方法是使用ApplicationLifecycle。我正在使用依赖注入来获取DefaultApplicationLifecycle 对象并在ThisActorSystemQuarantinedEvent 发生时调用defaultApplicationLifecycle.stop()。
我的问题是应用程序最终处于一种奇怪的状态,应用程序仍在运行并在 HTTP 端口上侦听,但几乎没有任何工作(所有参与者似乎都死了)。似乎Future 从未完成,而我在我的应用程序中没有定义stopHook。我是否应该在某个时候强制致电System.exit()?
【问题讨论】:
-
看起来
DefaultApplicationLifecycle#stop所做的只是运行所有的停止钩子。您需要自己处理实际过程。如果未来永远不会完成,可能是因为某个停止钩子由于某种原因未能完成(不是因为没有添加任何内容),但很难说是哪个或为什么。
标签: scala playframework akka