2017-02-28 64 views
1

我有一位actor通过异步API(ReactiveMongo)处理邮件并存储其结果。 IE计算完成时,actor要求ReactiveMongo存储计算结果并且该呼叫是非阻塞的。如何暂时停止Akka actor从邮箱读取邮件

如何阻止演员处理下一条消息,直到最后一个ReactiveMongo请求功能完成?此外,邮箱应该能够接收传入的消息。

+0

ReactiveMongo是否提供API来检查请求功能是否已完成? –

+0

是的,插入呼叫立即返回特征[WriteResult]。基本上我可以在feature.oncomplete上添加监听器,当它解决时,我必须调用一些方法来激活演员,这是一个问题。另一个问题是如何在插入呼叫后阻止演员。 –

回答

2

封闭液

简单和错误的答案:你可以通过阻断演员做到这一点,只需调用等待(或其他类似的方法在你使用的语言)。

这是错误的,因为不要阻止演员内部。

不封闭液

硕士\工作者模式是一个很好的这个问题:http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2

所以你工人演员将发送“工作完成” ReactiveMongo请求功能部件完成后,消息。然后主人演员将发送新的“做这个工作”消息给工人。

+0

非常感谢,师傅的工作比我今天早上设计的要好得多。 –