我们有一个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())
所以,我不想停止我的申请。所以,我的问题是:
actorystem需要终止强制吗?
终止actor系统后我的应用程序是否停止工作?
如果用户在actor系统终止后点击API怎么办?是否重新启动以处理API请求?
因此,如果我希望我的应用程序始终监听客户端请求,我需要做什么。
感谢。
答案 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负载均衡器的蓝绿色部署可以支持无状态应用程序的无停机升级。