作为服务守护进程

Akka Daemon Services

大多数初学者的 Akka 示例似乎都提倡像这样调用 actor 系统的 stop()shutdown() 方法:

object Main extends App {
    // create the ActorSystem
    val system = ActorSystem("HelloSystem")

    // put your actors to work here ...

    // shut down the ActorSystem when the work is finished
    system.stop
    system.shutdown
}

但是,如果您的 Akka 应用程序是一个 运行 服务,那么它应该(可以想象)永远存在吗?这意味着它开始了,actor 系统被创建了,actor 只是闲置直到需要完成工作(可能来自连接的客户端等)?

仅 initialize/start 演员系统并保留它是否可以(即完全省略调用 stopshutdown?Why/why 不行吗?

是的,没关系。这是一个类似于 AkkaHTTP 实现的问题。在 AkkaHTTP 中,您启动打开套接字并等待请求的参与者。

我想到了一个可能的问题:如果您需要一些短命的参与者(在您的长期 运行 服务中)来处理单个请求,您应该在不再需要它们后停止它们(释放资源),尤其是当 actor 是有状态的时候。

我写了一篇关于这个问题的博客post:https://mikulskibartosz.name/always-stop-unused-akka-actors-a2ceeb1ed41