我MyProcessingActor
演員將在一個實體ID使用ConsistentHashingRouter
,使得可以存在這個演員在進程的多個實例在任一個時刻(在多個線程)阿卡:橫跨主角實例共享狀態
的路由演員使用地圖來執行一些計算邏輯。因此,2個不同的演員實例可以同時讀寫這張地圖。
在這些actor實例之間共享映射看起來像是對actor模型的公然違反,即使它是Java ConcurrentHashMap
。
處理這類問題的最佳選擇是什麼?我沒有看到它在Akka文檔中解決,除非我錯過了這一點。
我可以看到2個選項:
- 一個
MyMapManagerActor
將管理讀/寫此地圖的一個實例。如果這是單線程的,雖然那麼有效MyProcessingActor
將單線程以及 - 使用阿卡STM的 - 我不認爲這雖然在該項目的最新版本
還有哪些其他的推薦辦法呢?
我沒有很多阿卡的經驗,但一直在研究它。你所描述的似乎與Akka打算適應的範式非常相反。也許你可以在消息中傳遞路由映射並使其不可變。如果你通過它,地圖也應該不可變。 – aglassman
你看過Akka Agents嗎?他們可能有助於解決這類問題http://doc.akka.io/docs/akka/snapshot/java/agents.html – nickebbitt