5

我正在使用 Azure 服务总线来管理带有 webrole 和 workerrole 的消息。

我需要知道如何在不使用循环的情况下一次从队列中获取多条消息。

4

3 回答 3

5

服务总线队列无法一次检索多个消息,但您可以设置预取,将缓存消息(从而提高性能)。更多关于预取的信息在这里

如果您确实需要批量读取消息,请考虑@AvkashChauhan 指出的内容:Windows Azure 存储队列支持在单个事务中一次读取多达 32 条消息。您需要单独删除每个队列消息;没有批量删除。

于 2012-06-07T23:37:48.443 回答
4

您可以使用 Microsoft.ServiceBus.Messaging 的 ReceiveBatch 方法:

private MessageReceiver messageReceiver;
var brokeredMessagesList = messageReceiver.ReceiveBatch(100);

您可以在队列上加锁,直到接收到的批次处理完成,在您完成处理后,您可以调用 CompleteBatch 来释放队列上的锁:

                List<Guid> messageLockTokenList = new List<System.Guid>();
                foreach(BrokeredMessage message in brokeredMessagesList)
                {
                    messageLockTokenList.Add(message.LockToken);
                }
                messageReceiver.CompleteBatch(messageLockTokenList)
于 2014-06-30T02:41:38.007 回答
3

从队列中检索消息时,在单个存储事务中将多条消息一起批处理。队列服务 API 中的 GetMessages 方法可以在单个事务中将指定数量的消息出队

通过 GetMessages 方法检索消息时,Queue Service API 在单个出队操作中支持的最大批处理大小限制为 32。超过此限制将导致运行时异常。

访问此处了解更多详细信息:http: //windowsazurecat.com/2010/12/best-practices-for-maximizing-scalability-and-cost-effectiveness-of-queue-based-messaging-solutions-on-windows-azure/

于 2012-06-07T23:10:23.533 回答