在哪里定期执行计算以更新演员的内部状态?

时间:2015-01-07 10:53:47

标签: scala akka actor

我正在学习Scala和Akka。

在我试图解决的问题中,我希望演员能够读取实时数据流并执行某个更新其状态的计算。

我每3秒钟通过一个调度程序发送请求,让演员返回其状态。

虽然我已经实现了很多东西,但我的演员有一个广播员和接收器以及正确更新状态的功能。我不完全确定如何做到这一点,我可能会把计算总是在actor内部的一个单独的线程中运行,但我想现在如果有更优雅的方式在scala中进行此操作。

1 个答案:

答案 0 :(得分:2)

我建议将两个演员之间的工作分开。父actor将管理童工参与者并跟踪状态。它向子工作者发送消息以触发数据处理。

子worker actor处理数据流 - 不要忘记将处理包装到Future中,这样它就不会阻止actor处理消息。它还定期向当前状态的主站发送消息。因此,童工是无国籍的,它会在状态发生变化时发送通知。

如果你想知道整体工作的当前状态,你问主人。原则上,您可以将其合并到一个将状态消息发送给自身的actor中。我不会直接更新状态以避免并发问题。原因是Future中运行的数据处理工作可以在与消息处理不同的线程上运行。