gpt4 book ai didi

scala - Akka actor 杀死/重启行为

转载 作者:行者123 更新时间:2023-12-04 02:54:55 27 4
gpt4 key购买 nike

我对在 Akka 中看到的行为感到困惑。简而言之,我有一组执行科学计算(恒星形成模拟)的 Actor 。他们有一些状态。当出现一个或多个进入无效状态的错误时,我想重新启动整个设置以重新开始。如果单个计算(在整个集合中)花费的时间太长(无法提前预测它可能运行多长时间),我也想这样做。

所以,在树的底部有一组模拟 actor,然后在它们上面有一个 Director(通过路由器创建它们,并通过该路由器向它们发送消息)。在其之上还有一个 Director 级别,用于在不同机器上创建 Director 并从它们收集所有结果。

我通过使用 Akka 调度程序在模拟开始时在本地 Director 中创建一次性超时事件来处理超时情况。当 Director 收到此事件时,如果其所有 Simulation actor 尚未完成,它会执行以下操作:

children ! Broadcast(Kill)

其中 children 是拥有/创建它们的 Router - 这会向所有 child (SimulActor) 发送一个 Kill。

我认为会发生的是所有子 Actor 都将重新启动。然而,它们的 preRestart() 钩子(Hook)方法从未被调用。我看到收到了 Kill 消息,仅此而已。

我一定是遗漏了一些基本的东西。我已经阅读了关于这个主题的 Akka 文档,我不得不说我发现它们不太清楚(尤其是关于 Supervisors 的页面)。我非常感谢对 Kill/restart 过程的详尽解释,或者只是一些其他引用资料(谷歌不是很有帮助)。

最佳答案

Note

If the child of a router terminates, the router will not automatically spawn a new child. In the event that all children of a router have terminated the router will terminate itself.

取自akka docs .

关于scala - Akka actor 杀死/重启行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16839983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com