簡體   English   中英

brokeredmessage微軟服務總線隊列ReceiveBatch無法獲取所有死信消息

[英]brokeredmessage microsoft service bus queue ReceiveBatch not obtaining all dead letter messages

我正在使用Microsoft Service Bus測試帶有死信隊列的項目。 我發送26條消息(代表字母),並且使用一個程序,當接收到這些消息時,會將其中的一些隨機放入死信隊列中。 郵件始終以窺視模式從死信隊列中讀取,因此,一旦到達那里,它們就會停留在那里。 運行幾次后,所有26條消息都將位於死信隊列中,並始終保留在那里。

但是,在讀取它們時,有時僅讀取少量(例如6),有時全部讀取26。

我使用以下命令:

const int maxToRead = 200; // It seems one wants to set this higher than    
                          // the anticipated load, obtaining only some back
IEnumerable<BrokeredMessage> dlIE = 
            deadletterSubscriptionClient.ReceiveBatch(maxToRead);

ReceiveBatch的重載有超時,但這沒有幫助,並且可能只會增加復雜性。

為什么它不每次都獲得全部26條消息,因為它是在“窺視”模式下使用的,因此消息保留在那里。

我可以使用“服務總線資源管理器”來實際驗證所有消息是否都在死信隊列中並保持在那里。

這主要是一個測試示例,但是希望“ ReceiveBatch”可以在確定性模式下工作,而不是以非常(不好的)隨機方式工作。

這只是部分答案或解決方法; 以下代碼可靠地獲取了所有元素,但未使用“ ReceiveBatch”; 請注意,據我所知,Peek(i)在基於一個索引的索引上運行。 另外:根據運行的服務器,如果通過消息提取向您收費,這可能會(或可能不會)更加昂貴,因此使用風險自負:

            List<BrokeredMessage> dlIE = new List<BrokeredMessage>();

            BrokeredMessage potentialMessage = null;
            int loopCount = 1;
            while ((potentialMessage = deadletterSubscriptionClient.Peek(loopCount)) != null)
            {
                dlIE.Add(potentialMessage);
                loopCount++;
            }

暫無
暫無

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

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