2017-02-28 62 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

非常感謝,師傅的工作比我今天早上設計的要好得多。 –