我对Akka中的行为感到困惑。简单来说,我有一组执行科学计算(星形成模拟)的演员。它们有一些状态。当发生错误导致一个或多个进入无效状态时,我希望重新启动整个集合以重新开始。如果单个计算(在整个集合上)花费的时间太长(无法预测运行时间),我也想这样做。
因此,在树底部有一组Simulation演员,然后是它们上面的Director(通过路由器创建它们,并通过该路由器发送消息)。再上面有一个更高级别的Director,用于在不同的机器上创建Directors并收集它们的所有结果。
我通过使用Akka调度程序在本地Director中创建一次性超时事件来处理超时情况。当Director收到此事件时,如果其所有Simulation演员尚未完成,则会执行以下操作:
因此,在树底部有一组Simulation演员,然后是它们上面的Director(通过路由器创建它们,并通过该路由器发送消息)。再上面有一个更高级别的Director,用于在不同的机器上创建Directors并收集它们的所有结果。
我通过使用Akka调度程序在本地Director中创建一次性超时事件来处理超时情况。当Director收到此事件时,如果其所有Simulation演员尚未完成,则会执行以下操作:
children ! Broadcast(Kill)
children是拥有/创建它们的路由器 - 这将向所有子级(SimulActors)发送一个Kill信号。
我原以为会重新启动所有子级演员。 但是,它们的preRestart()钩子方法从未被调用。 我看到了收到的Kill消息,但就这样。
我一定是缺少了一些基本的东西。 我已经阅读了关于此主题的Akka文档,并且我必须说我觉得它们不太清楚(特别是Supervisors页面)。 我非常希望能够获得有关Kill / restart过程的详细说明,或者其他参考资料(谷歌并没有提供很多帮助)。