繁体   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