7

場景:做多Azure的輔助角色輪詢相同的隊列導致死鎖或帶毒郵件

如果我分拆多個工作角色或多個線程,其投票天青隊列的新消息一個工人的作用。

有人可以確認,如果這是正確的設計方法?我希望有很多工人角色的原因是爲了加快PROCESSJOB。我們的應用程序應該接近實時,即只要有我們應該得到的消息,就應用複雜的業務規則並承諾使用AZURE DB。我們預計每3分鐘有11,000條消息。

謝謝。

回答

16

您可以擁有儘可能多的隊列閱讀器。擴展工作角色實例非常普遍,因爲它們都可以從同一個隊列中讀取,從而爲您提供更高的工作吞吐量。

當您閱讀隊列消息時,它會標記爲「不可見」一段時間,以防止他人閱讀並完成相同的工作。消息的所有者必須在時間段到期之前將其刪除,否則消息將再次變爲可見,並且當原始讀取器試圖刪除時,將拋出異常。這意味着你的操作必須是冪等的。

沒有直接的毒害消息處理,但它很容易實現,因爲每條消息都有一個出隊計數。只需檢查它並在讀取3-4次後刪除毒害消息。您還可以根據出列計數動態調整超時期限,因爲由於時間窗口太短可能導致處理失敗。

這裏的MSDN documentationDequeueCount。編輯:至於在3分鐘內處理11,000條消息:隊列的可擴展性目標是 2000 TPS,或在3分鐘內達到360,000個事務(遠遠超出11,000條消息要求)。通過將消息合併到單個隊列消息中,以及一次讀取多條消息,您可以進一步加快速度,這也會減少您的交易次數。您還可以查看隊列的ApproximateMessageCount屬性,以查看您的隊列是否正在備份(然後擴展到其他物質以幫助使用隊列項目)。

+0

謝謝@David Makogon的詳細解答。欣賞它。 –