簡體   English   中英

Azure服務結構:IReliableQueue

[英]Azure service fabric : IReliableQueue

我正在使用天藍色服務面料進行新服務。

對於面向客戶端的網關,我有一個使用Web API端點的無狀態服務獲取請求,實際工作是使用可靠的無狀態actor完成的。

正如Sean McKenna - MSFT在這個問題中所建議的,我將傳入的請求放在ReliableQueue中並將結果存儲在ReliableDictionary中。

我不明白如何實現這個,我在哪里定義ReliableQueue? 很明顯(?)將一個作業排入Web API控制器,但是我在哪里出列一個對象以及什么時候出現? 沒有事件觸發告訴我添加了一個對象?

如你所見,我會在這方面得到一些幫助

謝謝

在您提到的問題中,我正在描述WordCount示例中顯示的模式。

在這種情況下,應用程序由無狀態網關服務和有狀態處理服務組成。 客戶端輸入被發送到無狀態網關,然后中繼到有狀態服務,在那里它最初保存在ReliableQueue 同時,在RunAsync方法中運行一個無限的while循環,將項目從隊列中拉出並處理它們,結果存儲在ReliableDictionary 當您希望快速確認回到您收到(並安全地保持!)其輸入的客戶端並且能夠以異步方式執行實際處理時,此模式非常有用。

請注意,如果您打算將狀態存儲在ReliableQueue / ReliableDictionary ,那么使用無狀態actor進行處理可能沒什么價值。 您最好將該邏輯移動到有狀態服務中的類型中並在那里進行處理,因為您可能會來回保存自己的網絡跳躍。

如果我正確理解您的問題,您只是在尋找從無狀態服務到演員的通信方式。 如果是這樣,您不需要可靠的隊列 - 只需使用ActorProxy實例進行調用:

ActorId actorId = new ActorId("YourActorId");
string applicationName = "fabric:/YourAppName";
IYourActor actor = ActorProxy.Create<IYourActor>(actorId, applicationName);
await dtoActor.DoWork(new WorkItem());

Service Fabric將為您路由此呼叫。

您可以擁有一個有狀態服務,該服務將使RunAsync方法中的隊列中的項目出列(有關RunAsync()示例,請參見此處 )。

當您將某個項目出列時,您可以使用ActorProxy與actor進行通信,並要求它執行該項工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM