2015-10-20 25 views
0

假設我有2個角色A和B,A要求B在10秒內超時。之後,B仍然忙於處理其他無法在10秒內響應A的消息,因此Future中的actor A獲取超時異常。Akka問模式擺脫目標演員的郵箱超時消息?

的問題是:

1)後男演員有例外,確實是一個發送到B仍然在郵件內B的郵箱等待B處理它?

2)如果是,如何防止/檢測B形式的消息?

回答

0

答案是肯定的,信息仍然在B的框中。在許多情況下,這是一種常見的關於Future的誤解,例如問題模式,在這種情況下,您有一些請求正在進行,表示未來會在有限的時間後超時;大多數人會認爲這將意味着,當被期待已久的過程將被取消,但沒有辦法,像一個Future一個通用的抽象可以做到這一點(也記得FutureThread)。

至於第二個問題的答案是,沒有簡單的答案,你需要考慮一個適合你的環境的策略。如果你所有的演員都駐留在同一個虛擬機中,你可以在你的消息中嵌入時間戳來驗證目標演員;這仍然是活潑的,因爲演員B可以花費足夠的時間來處理消息以觸發A方的超時,產生不一致(即A認爲操作失敗,B成功)。

否則,在分佈式環境中,當主角A檢測到超時時,可以向主角B發送補償動作。你可能想看看在佐賀模式(你可以找到一個很好的談話here)如果你正在做基於演員,分佈式系統和您有這種情況的困擾。無論如何,只要記住分佈式系統是很難的,沒有任何銀彈或任何方法來努力學習,以使它們正確。