作为服务守护进程
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 演员系统并保留它是否可以(即完全省略调用 stop
和 shutdown
?Why/why 不行吗?
是的,没关系。这是一个类似于 AkkaHTTP 实现的问题。在 AkkaHTTP 中,您启动打开套接字并等待请求的参与者。
我想到了一个可能的问题:如果您需要一些短命的参与者(在您的长期 运行 服务中)来处理单个请求,您应该在不再需要它们后停止它们(释放资源),尤其是当 actor 是有状态的时候。
我写了一篇关于这个问题的博客post:https://mikulskibartosz.name/always-stop-unused-akka-actors-a2ceeb1ed41
大多数初学者的 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 演员系统并保留它是否可以(即完全省略调用 stop
和 shutdown
?Why/why 不行吗?
是的,没关系。这是一个类似于 AkkaHTTP 实现的问题。在 AkkaHTTP 中,您启动打开套接字并等待请求的参与者。
我想到了一个可能的问题:如果您需要一些短命的参与者(在您的长期 运行 服务中)来处理单个请求,您应该在不再需要它们后停止它们(释放资源),尤其是当 actor 是有状态的时候。
我写了一篇关于这个问题的博客post:https://mikulskibartosz.name/always-stop-unused-akka-actors-a2ceeb1ed41