2017-07-25 53 views
0

我是奧爾良的新手。我想知道如何使用奧爾良的穀物儲存功能。我應該像使用消息隊列一樣使用它嗎?它是否暫時保存我的狀態 並保持數據可用,即使它引發異常或 服務器崩潰。我應該如何使用奧爾良的存儲提供商

謝謝!

+0

你有看過文檔嗎? http://dotnet.github.io/orleans/Documentation/Getting-Started-With-Orleans/Grain-Persistence.html – BozoJoe

回答

0

擴展Grain<T>類並用[StorageProvider]屬性註釋的穀物將在您撥打base.WriteStateAsync()時將其當前狀態寫入指定的提供程序。

如果穀物由於任何原因(包括服務器崩潰)而被停用,那麼在重新激活時穀物將被最後保存的狀態初始化。

我喜歡把它看作緩存而不是隊列。希望有所幫助,並且像之前的海報說的那樣,閱讀文檔,這很有用。

0

我寫了幾篇文章來引導你一步一步變成習慣的存儲提供API和設置持久性存儲:

奧爾良基本上給你一個非常簡單的API(圖片來自上面的第一篇文章):

enter image description here

您的穀物將從Grain<T>繼承,其中T是您自己的類,包含您想要堅持的狀態。來自Grain<T>State屬性允許您訪問它並讀取/修改狀態。其餘的async方法可讓您保存對持久性存儲的更改,讀取它們或清除狀態。你通常不需要閱讀狀態;它在穀物被激活時自動完成。

沒有消息隊列參與。當您調用這三種方法之一時,他們將使用底層存儲提供程序與您正在使用的任何數據庫進行通信。由於特定於存儲區的錯誤(例如死鎖),或由於樂觀併發控制檢查失敗導致的InconsistentStateException,這可能會失敗。

無論您決定使用哪種存儲(例如SQL Server,Azure表存儲,內存等),都必須通過XML配置或代碼進行配置,並給出名稱。此名稱隨後用於覆蓋糧食類的[StorageProvider]屬性中;通過這種方式,穀物知道在執行持久性工作時要使用什麼存儲提供程序(您的系統中可能有多種存儲提供程序)。

所有這些都是如何完成的細節有點冗長(這就是爲什麼我寫這篇文章的原因)。您可以在我上面鏈接的文章或Grain Persistence文檔中找到關於此的更多信息。