在没有循环的情况下从队列接收多条消息

时间:2012-06-07 20:39:58

标签: azure azure-worker-roles servicebus azure-queues azureservicebus

我正在使用Azure Service Bus管理具有Web角色和辅助角色的邮件。

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

3 个答案:

答案 0 :(得分:5)

Service Bus队列无法一次检索多条消息,但可以设置预取,其中消息将被缓存(从而提高性能)。有关预取here的更多信息。

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

答案 1 :(得分: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)

答案 2 :(得分:2)

从队列中检索邮件时,在单个存储事务中将多个邮件一起批处理。队列服务API中的GetMessages方法允许在单个事务中对指定数量的消息进行排队

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

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