2016-10-12 42 views
0

我有一天運行一些工作的工作。 在這些時間之間,郵件被隱藏。堅持與Akka.net存儲

如果服務器需要重啓,你如何處理這個隱藏?也許存儲不是應該使用什麼?

回答

0

答案可能取決於您的使用案例。如果您主要關心受控關閉,那麼您可以在關閉之前向演員發送消息,以便及早處理存儲的消息,或者在演員重新啓動之前將其持續存儲到臨時存儲中。

如果演員系統崩潰,這並不會對你有很大幫助。爲了防止這種情況發生,您可以簡單地將郵件保存到數據庫,文本文件或您選擇的其他存儲機制,而不是使用存儲。創建一個兒童演員(下面的「存儲演員」)來爲您處理IO(因爲這是一個潛在的風險操作)。

父代演員有(至少)兩種狀態:ListeningProcessing。雖然Listening,它發送到達存儲actor的任何消息,將其寫入存儲庫。當你的工作運行時,那麼演員Become() s Processing

當父角色的狀態更改爲Processing時,父消息會向存儲參與者發送消息並請求發送所有存儲的消息。這些被適當接收和處理。當存儲參與者發送了所有的消息時,它發送一個Complete消息。然後再回到父母角色Become()Listening,週期重新開始。

在其他情況下,您可能需要使用Akka.Persistence。這是一個太大的主題進入這裏,但你可以找到你需要的信息做出明智的決定:http://bartoszsypytkowski.com/how-akka-net-persistence-works/

我會考慮的另一件事是這個過程是否實際上需要批處理。消息系統中存在一些有效的批處理使用情況,尤其是在與其他非基於消息的系統進行交互時,但如果在角色系統中內部使用它,我的第一個操作是查看是否可以實時執行該過程。