我開始用Akka創建一個系統。該系統必須解決產品的依賴關係。依賴關係從兩個不同的來源計算。Akka,給定請求的合計回覆
class Deps extends Actor {
def receive = {
case Resolve(p) =>
context.actorOf(System1.props) ! Resolve(p)
context.actorOf(System2.props) ! Resolve(p)
}
}
但它必須彙總兩個回答才能回覆自己。沒有Akka的任何經驗,我想到了兩種解決方案。
1 /維護一個Map[(Product, Sender), Set[Response]]
每次Deps
演員從一個孩子接受Response
,將其添加到組的響應,如果有兩個響應它可以創建併發送響應。
2 /創建一個Actor
每Product
的Deps
演員是(或創建一個兒童演員即是)與Product
作爲構造參數初始化。它維護兩個var Option[Response]
,每次收到一個Response
他驗證他們是否都在場,他可以創建併發送響應。
我認爲這是最好的方法,但我必須維護兩個var
的響應和一個發件人,所以我不知道這是最好的方法。
3 /用途ask
一切被描述成該文檔。
4 /使用告訴了可變「結果」
我實際的代碼已經一個Report
這是來自所有來源的結果更新。但我可以使用與噴霧相同的圖案;我可以將報告作爲消息的一部分傳遞給所有參與者,以便他們可以立即更新消息,以便我可以真正「開火併忘記」。
在回覆演員的發件人之前,等待和聚合多個響應的常用方法是什麼?
謝謝。但是在這裏你使用的是「問」模式。雖然看起來「告訴」是首選。 –
一致認爲,由於性能的原因,首選是告訴,但它會使你的演員中的邏輯更加複雜。詢問你可以使用理解來彙總答案;告訴你必須在多個接收調用之間保持狀態。 –