讓一個演員在失敗中再次嘗試一些東西的好方法是什麼,但是重試之間的時間間隔越來越長?比方說,我希望演員在15秒後再嘗試30秒,然後每分鐘進行有限次數的嘗試。Akka:如何安排延遲間隔增長的失敗重試?
這是我想出來的:
- 演員的執行實際工作有一個可選的
RetryInfo
參數,如果存在的話,包含 重試我們目前的數量的方法在失敗 - ,演員將自身發送一個新的
ScheduleRetryMessage
與retryCount + 1
,則拋出一個RuntimeException - 另一個演員監督工人的演員,用
new OneForOneStrategy(-1, Duration.Inf()
返回Resume
作爲其指令。演員沒有狀態,所以Resume
應該是OK - 在收到
ScheduleRetryMessage
,演員將- 如果
retryCount < MAX_RETRIES
:用阿卡的調度安排所需的延遲 - 其他後發送
RetryMessage
:終於放棄,發送消息給其他演員的錯誤報告
- 如果
這是一個很好的解決方案,或是否有更好的方法?
有趣的想法,我會嘗試。謝謝! – 2012-05-18 12:26:59