![](/img/trans.png)
[英]Azure service bus | Re process dead letter messages back to queue | How to receive all messages from dead letter queue?
[英]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.