MessageReceiver.ReceiveBatch()功能未按预期工作。

3
我正在尝试使用MessageReceiver中的ReceiveBatch方法批量接收ServiceBus中的消息:
IEnumerable<BrokeredMessage> messages;
var messagingfactory = MessagingFactory.CreateFromConnectionString("ConnectionString");
var msgrcvr = messagingfactory.CreateMessageReceiver("queueName", ReceiveMode.ReceiveAndDelete);
messages = msgrcvr.ReceiveBatch(20, timeoutInSecs);

我已经使用Service Bus Explorer检查了我的队列,确认其中包含20条消息。

这段代码仅返回messages结构中的一条消息。我是否遗漏了某个属性?


我有一个类似的问题;我收到了一个随机数,而不是所有的数;请参见:http://stackoverflow.com/questions/28988477/brokeredmessage-microsoft-service-bus-queue-receivebatch-not-obtaining-all-dead - JosephDoggie
有人知道如何向微软报告此错误吗?我尝试过了,但找不到现成的链接... - JosephDoggie
1
这似乎仍然是一个问题。怎么可能没有任何解决方案!? - creatiive
我不知道。 - JosephDoggie
1个回答

0

这只是一个部分回答或解决方法; 以下代码可可靠地获取所有元素,但不使用"ReceiveBatch"; 注意,就我所知,Peek(i)操作的是基于1的索引。同时:根据你所运行的服务器,如果你按消息拉取收费,这可能(或可能不)更加昂贵,因此请自行决定是否使用:

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

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

如果有人对如何直接使用ReceiveBatch有更好的答案,请发帖。 - JosephDoggie
很遗憾,向微软报告一个看起来是真正的漏洞并不容易,也没有更明显、更简单的方式! - JosephDoggie
1
尝试使用GitHub并搜索“Microsoft Azure”。 - Mariusz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接