谁监控每个演员的邮箱?

时间:2017-04-04 08:39:01

标签: scala akka

我知道演员是持久的,只要无所事事(邮箱中没有邮件),他们总是处于闲置状态,那么谁监控邮箱?

是演员本身吗?但它没有从调度员分配的线程,直到它收到消息。?

或者,是否有任何后台守护程序运行每个actor的监控邮箱?

1 个答案:

答案 0 :(得分:2)

正如@Sarvesh Kumar Singh所说,演员不是默认的持久性。您可以通过扩展PersistentActor创建持久性actor:Akka Persistence。 实际上,当在actor系统层次结构中创建一个actor(cell)时,它的邮箱(Mailbox是Runnable的子类)将附加到调度程序,当actor启动时,调度程序将执行邮箱runnable(在run方法中定义)通过从邮箱队列中轮询消息,如果有消息,它将触发定义的actor接收方法来实际处理消息。消息循环(在此运行期间,队列中的消息将被处理为批处理,如果处理此批处理批处理没有通过调度程序吞吐量配置的限制)也在run方法中通过递归调用完成processMailBox在邮箱中定义。在每轮结束时,邮箱将自己附加到调度程序线程池以供执行,如果有消息,则调度执行者邮箱以继续循环。如果没有,循环被破坏,下一次运行将被安排在发送给actor的消息时,此时,当你调用actorRef时,消息将通过附加有actor单元的调度程序发送!消息,这将使调度员安排消息处理,检查出来:Dispatch::sendMessageDispatcher::dispatch。如Dispatchers中所述,调度程序的吞吐量可以配置为在线程跳转到下一个actor之前确定每个actor要处理的最大消息数。