我正在使用Azure Service Bus管理具有Web角色和辅助角色的邮件。
我需要知道如何在不使用循环的情况下立即从队列中获取多条消息。
答案 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.超出此限制将导致运行时异常。