Scala 终止后重新启动Akka Actor系统

Scala 终止后重新启动Akka Actor系统,scala,akka,akka-http,shutdown-hook,Scala,Akka,Akka Http,Shutdown Hook,我们有一个Akka http应用程序,大约有100多个API和15多个参与者。在Http.bindAndHandle(路由、主机、端口)之后,我终止了ActorSystem Http().bindAndHandle(corsHandler(routes), "0.0.0.0", 9090/*, connectionContext = https*/) sys.addShutdownHook(actorSystem.terminate()) 所以,我不想停止我的申请。因此,我的问题是: acto

我们有一个Akka http应用程序,大约有100多个API和15多个参与者。在Http.bindAndHandle(路由、主机、端口)之后,我终止了ActorSystem

Http().bindAndHandle(corsHandler(routes), "0.0.0.0", 9090/*, connectionContext = https*/)
sys.addShutdownHook(actorSystem.terminate())
所以,我不想停止我的申请。因此,我的问题是:

  • actorsystem是否需要强制终止

  • 我的应用程序在终止actorsystem后是否停止工作

  • 如果用户在actorsystem终止后点击API怎么办?它是否重新启动以处理API请求

  • 那么,如果我希望我的应用程序始终侦听客户端请求,我需要做什么呢


    谢谢。

    关闭挂钩的目的是允许在JVM即将关闭时有序地关闭应用程序。并非在所有情况下都需要这样做,但是如果ActorSystem希望以有序的方式释放资源,或者向集群中的其他节点发出关闭的信号,则有序关闭可能非常有用

    当actor系统终止时,将没有更多的actor来处理HTTP请求,因为如果没有一个正在运行的actor系统作为其中的一部分,actor就不可能存在。因此,如果用户在actor系统终止后点击API,actor系统将不会重新启动,因为请求将被拒绝(连接被拒绝或其他)

    您无法避免在代码中发生这种情况,因为JVM关闭无法取消


    但是,好消息是,您可以使用各种操作技术在基础架构级别避免这种情况,例如,使用HTTP负载平衡器的蓝绿色部署可以支持无状态应用程序的无停机升级。

    您正在寻找应用程序中的容错性。因为actor系统将在出现错误的情况下终止,或者当我们显式地强制它终止时终止。为了使应用程序具有容错性,您必须使用监控策略。请查看这些链接


    你的演员被解雇的原因是什么?为什么不使用监督策略来恢复或重新启动ActorTanks@Raman,以便快速响应呢。是否需要终止系统?我不知道它什么时候会终止。谢谢,我会检查监控策略以恢复或重新启动。如果你想让我满意,请让我知道链接。因此,只有在出现错误时才会终止!!然后使用监控策略,一旦您的错误传播到监控程序,只需重新启动actor,这很简单,这样您的应用程序就会监听您的请求。我已经多次初始化ActorYatem。就像在我的服务中一样,我需要执行者和actorsystems的隐式val。因此,我在我的类中这样初始化了ActorYatem 4次:private implicit val actorSystem=actorSystem()private implicit val executor:ExecutionContext=actorSystem.dispatcher private implicit val materializer:ActorMaterializer=ActorMaterializer()这对我的应用程序性能有影响吗。因为我的应用程序在运行1到2天后挂起。如上所述,我只终止了一个actor系统。这些actor系统占用了服务器的所有资源吗?不应该这样做。但这听起来像是一个完全不同的问题。我建议你问一个关于Stackoverflow的新问题“为什么我的Akka应用程序在1到2天后挂起?”谢谢,我一定会研究这个问题