终止后重启Akka Actor System

时间:2018-05-05 17:17:07

标签: scala akka akka-http shutdown-hook

我们有一个Akka http应用程序约。 100多个API和15个以上的演员。在Http.bindAndHandle(routes, host, port)之后我终止了ActorSystem。

Http().bindAndHandle(corsHandler(routes), "0.0.0.0", 9090/*, connectionContext = https*/)
sys.addShutdownHook(actorSystem.terminate())

所以,我不想停止我的申请。所以,我的问题是:

  1. actorystem需要终止强制吗?

  2. 终止actor系统后我的应用程序是否停止工作?

  3. 如果用户在actor系统终止后点击API怎么办?是否重新启动以处理API请求?

  4. 因此,如果我希望我的应用程序始终监听客户端请求,我需要做什么。

    感谢。

2 个答案:

答案 0 :(得分:1)

您正在寻找应用程序中的容错能力。由于actor系统将在某些错误的情况下或在我们明确强制终止时终止。您必须使用监督策略来使您的应用程序具有容错能力。请查看这些链接

  

https://doc.akka.io/docs/akka/2.5/fault-tolerance.html   https://doc.akka.io/docs/akka/2.5/general/supervision.html

答案 1 :(得分:0)

关闭挂钩的目的是允许在JVM即将关闭时有序关闭应用程序 。它并不一定在所有情况下都是必需的,但如果您的ActorSystem想要以有序的方式释放资源,或者向群集中正在关闭的其他节点发出信号,那么有序关闭可能会很有用。

当actor系统终止时,将没有更多的actor来处理HTTP请求,因为如果没有正在运行的actor系统,actor就不能存在。所以不,如果您的用户在actor系统终止后访问API,则不会重新启动actor系统,因为该请求将被拒绝(连接被拒绝或其他)。

您无法避免在代码中发生,因为无法取消JVM关闭。

然而,好消息是,您可以使用各种操作技术(例如,基础设施级别)来避免它使用HTTP负载均衡器的蓝绿色部署可以支持无状态应用程序的无停机升级。