scala - 如何等待Akka Actor系统终止?

标签 scala akka

我需要启动 Akka (2.0) actor 系统,发送一些消息,然后等待它完成繁重的工作。之后,我需要做一些与那些 Actor 无关的事情。

我尝试使用以下代码等待所有 Actor 停止:

val system = new ActorSystem("parallelRunners")
val master = system.actorOf(Props[Master])
master ! Start
system.awaitTermination // <-- hangs here

所有 Actor 都通过 self 自杀!毒丸。我做错了什么?

最佳答案

在 Akka 2.4.1 for scala 2.11 中,它似乎又有所不同。

system.awaitTermination() 已弃用,文档指示我们改用 Await.result(system.whenTermminate, timeout)

203也就是说,system.terminate仍然是终止系统的方式。

这是我使用的一些示例代码:

val actorSystem = ActorSystem("ActorSystem")
val myActors = actorSystem.actorOf(Props[MyActor].withRouter(RoundRobinPool(10)), "MyActors")
rainbows.foreach(rainbow => myActors ! rainbow)
Await.ready(actorSystem.whenTerminated, Duration(1, TimeUnit.MINUTES))

然后在 MyActor 类中我有行 context.system.terminate()

关于scala - 如何等待Akka Actor系统终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12436397/

相关文章:

scala - 在 Spark 中导入 parquet 文件时出现内存问题

scala - (在 Scala 中,)有什么可以用类的泛型类型参数来完成,但不能用抽象类型成员来完成的吗?

json - 如何在 AKKA-HTTP 中将 Future[Option[Foo]] 类编码为 JSON

scala - Akka Http 客户端 + 负载均衡器

scala - 如何使用 ScalaPB 序列化/反序列化使用 'oneof' 的 protobuf 消息?

scala - Scala 中 def 和 val 的区别

java - 如何解决scala代码中超出GC过载限制的问题

java - 如何检测消息过多? [ Akka Actor ]

scala - Akka Supervisor 策略 - 正确的用例

scala - 为什么spark broadcast在我用extends App的时候效果不好?