0

我使用Azure的環境和發展.NET管理多個Azure的服務總線隊列同時

我運行一個Web應用程序(ClientApp),其採用的客戶端數據進行一系列的計算。這些計算是性能密集型的,因此它們在單獨的Web應用程序(CalcApp)上運行。

當前,ClientApp將計算請求發送到CalcApp。來自每個客戶的請求都被放入一個公共隊列,並且每次運行一個FIFO。我的目標是爲每個客戶創建單獨的隊列並同時運行幾個計算。

我想使用Azure服務總線隊列來實現這一點。在ClientApp上,服務總線將檢查該客戶端的現有隊列,並在需要時創建一個隊列。在CalcApp上,應用程序會定期檢查現有的隊列。如果它找到一個新的隊列,那麼它會創建一個新的QueueClient,它使用OnMessageAsync()和RunCalculationsAsync()作爲回調函數。

這是可行的,甚至是一個好主意?

回答

0

我會考慮使用多個消費者,而不是使用多個消費者,如果您需要區分基於哪個客戶端來源的處理類型,可能會使用表示「客戶端」的主題。每個客戶可以在隊列中添加一個條目,並且消費者可以在消息上「鬥爭」。如果遵循這種方法,則不會有兩次處理同一消息的機會。

我不確定有多個隊列是必要的。

以下是有關競爭消費者模式的更多信息。
https://msdn.microsoft.com/en-us/library/dn568101.aspx

你也可以建立一個消費者併產生多個線程。在這個模型中,你將有一個隊列和一個消費者,但仍然能夠一次計算多個隊列。但最終,競爭的消費者更具可擴展性,並結合使用這兩種策略。

+0

我仍然能夠處理這種模式的重複檢測?通過混合計算按鈕,可能讓客戶非常不耐煩。 – clenard

+0

通過重複我假設你的意思是在一個特定的客戶端的用戶多次請求計算,並且同一事件的多條消息登陸隊列。 Azure構建了可以配置的重複檢測。或者,您可以使用持久存儲來了解任務是否已完成。您可以創建一個SQL表,DocumentDB等,在過程開始時檢查這種情況。在這個過程結束時,爲這個值加上標記,以便下一個需要處理的消費者知道它已經完成。 – DanielG

+0

有關原生重複檢測的信息:http://blog.iquestgroup.com/en/windows-azure-service-bus-duplicate-detection/#.Vnl7CblIjmF – DanielG

相關問題