我正在使用 Azure 服务总线来管理带有 webrole 和 workerrole 的消息。
我需要知道如何在不使用循环的情况下一次从队列中获取多条消息。
我正在使用 Azure 服务总线来管理带有 webrole 和 workerrole 的消息。
我需要知道如何在不使用循环的情况下一次从队列中获取多条消息。
服务总线队列无法一次检索多个消息,但您可以设置预取,将缓存消息(从而提高性能)。更多关于预取的信息在这里。
如果您确实需要批量读取消息,请考虑@AvkashChauhan 指出的内容:Windows Azure 存储队列支持在单个事务中一次读取多达 32 条消息。您需要单独删除每个队列消息;没有批量删除。
您可以使用 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)
从队列中检索消息时,在单个存储事务中将多条消息一起批处理。队列服务 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/