2014-10-07 83 views
7

我想保留事件進入公交車的順序。 例如,如果事件1然後事件2進入公共汽車然後訂閱的演員將按順序獲得他們。Akka的事件總線保證消息順序?

的問題是,如果這樣的順序是保證,無論在集羣和單個節點的演員系統。

+0

我假設你是從一個單獨的線程添加它們,否則你可以保證的是,所有的聽衆看到相同的順序。 – 2014-10-07 10:52:47

+0

@dds這部分是指演員溝通,但我想知道事件總線。 – 2014-10-07 11:16:04

+1

@PeterLawrey是的,單個主題發佈者 – 2014-10-07 11:16:59

回答

3

如果您在參與者系統(system.eventStream)上使用事件流,並且您可以保證單個線程正在發佈,則是,訂單將被保留。事件總線(與system.eventStream有關的那種)的子信道分類風格非常簡單。基本上類型的Map到訂閱演員列表。當一個事件發佈時,它從Map(如果有的話)獲得匹配的訂戶列表,然後將消息發送給它們中的每一個。因此,如果只有一個線程在呼喚publish,那麼就需要在完成發佈事件1(並因此提供給所有用戶的郵箱)在繼續之前事件2。參與者按收到郵件的順序處理郵箱(除非您使用的是自定義的PriorityMailbox impl),所以先進先出。

現在當然,如果你有多個線程,我不能爲了處理保證這是線程1可以開始先發布,但是線程2可能完成它首先在通向你會考慮出點什麼。