我有一位actor通过异步API(ReactiveMongo)处理邮件并存储其结果。 IE计算完成时,actor要求ReactiveMongo存储计算结果并且该呼叫是非阻塞的。如何暂时停止Akka actor从邮箱读取邮件
如何阻止演员处理下一条消息,直到最后一个ReactiveMongo请求功能完成?此外,邮箱应该能够接收传入的消息。
我有一位actor通过异步API(ReactiveMongo)处理邮件并存储其结果。 IE计算完成时,actor要求ReactiveMongo存储计算结果并且该呼叫是非阻塞的。如何暂时停止Akka actor从邮箱读取邮件
如何阻止演员处理下一条消息,直到最后一个ReactiveMongo请求功能完成?此外,邮箱应该能够接收传入的消息。
封闭液
简单和错误的答案:你可以通过阻断演员做到这一点,只需调用等待(或其他类似的方法在你使用的语言)。
这是错误的,因为不要阻止演员内部。
不封闭液
硕士\工作者模式是一个很好的这个问题:http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2
所以你工人演员将发送“工作完成” ReactiveMongo请求功能部件完成后,消息。然后主人演员将发送新的“做这个工作”消息给工人。
非常感谢,师傅的工作比我今天早上设计的要好得多。 –
ReactiveMongo是否提供API来检查请求功能是否已完成? –
是的,插入呼叫立即返回特征[WriteResult]。基本上我可以在feature.oncomplete上添加监听器,当它解决时,我必须调用一些方法来激活演员,这是一个问题。另一个问题是如何在插入呼叫后阻止演员。 –