2016-02-18 85 views
1

之前,我有一個UntypedActorPinnedDispatcher即啓動時,試圖做一個且只有一個任務重牛逼運行。處理殘留信息演員重啓

爲了讓演員更加敏感,任務牛逼被切成很多連續的子任務牛逼 ... 牛逼ñ,每個子任務處理程序發送self()新消息繼續下一個子任務:

@Override 
public void onReceive(Object message) throws Exception { 
    try { 
     MethodUtils.invokeMethod(this, "handleMessage", message); 
    } catch (NoSuchMethodException nsme) { 
     unhandled(message); 
    } 
} 

@SuppressWarnings("unused") 
public void handleMessage(T1 message) { 
    doTask1(); 
    getSelf().tell(new T2(), getSelf()); 
} 

@SuppressWarnings("unused") 
public void handleMessage(T2 message) { 
    doTask2(); 
    getSelf().tell(new T3(), getSelf()); 
} 

的問題是,如果在從其他演員的消息演員崩潰,很可能有些殘留消息(例如T3)將保留在郵箱中重啓後。

有沒有辦法讓這種類型的actor在重啓後處於乾淨的初始狀態?

回答

0

隨着getContext().become(),我們可以建立一個狀態機。當參與者處於初始狀態時,它只希望一種消息開始處理(在這種情況下爲T1)。在收到此消息之前,請忽略任何其他消息。