2011-12-02 31 views
1

我的Akka FSM參與者需要根據類型區分消息的優先級。具體而言,演員接收這些類別之一的消息,按優先次序:如何使用PriorityExecutorBasedEventDrivenDispatcher防止消息重新排序?

  1. 消息觸發狀態轉換
  2. 消息用於查詢當前狀態
  3. 消息引起演員執行一些工作(「WorkMsg」)

根據Akka文檔,可以根據上面的列表使用包含PriorityGenerator的PriorityExecutorBasedEventDrivenDispatcher對消息進行優先級排序。我已經使用這個調度程序實現了FSM actor,它運行良好。

問題是,這個調度員也reorders WorkMsgs,這不是我想要的。

WorkMsgs包含一個時間戳併發送給按此時間戳排序的FSM參與者。當FSM參與者處理WorkMsgs時,它丟棄比以前的WorkMsg更舊的WorkMsgs。所以如果這些重新排序,我會丟失數據。

沒有PriorityExecutorBasedEventDrivenDispatcher,WorkMsgs不會重新排序,但是不滿足上面列表中的優先級。

如何維護上面列表中的優先級,同時防止對相同優先級的消息進行重新排序?

回答

2

A 確定優先級代理角色可以優先考慮將消息發送給您的工作者角色。您將不得不對輸入消息進行排序和存儲,並實施優先級邏輯。工作人員還必須在每封郵件後回覆代理,告知代理已準備好進行更多工作。

+0

感謝您的提示尼爾。我不是將優先級邏輯放在一個單獨的actor中,而是基於Akkas PriorityGenerator創建了自己的MessageInvocation比較器。 – eirirlar