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

Azure 在没有循环的情况下从队列接收多条消息,azure,azure-worker-roles,servicebus,azure-queues,azureservicebus,Azure,Azure Worker Roles,Servicebus,Azure Queues,Azureservicebus,我正在使用Azure Service Bus管理带有webrole和workerrole的邮件 我需要知道如何在不使用循环的情况下一次从队列中获取多条消息。从队列中检索消息时,在单个存储事务中将多条消息批处理在一起。队列服务API中的GetMessages方法允许在单个事务中取消指定数量的消息队列 通过GetMessages方法检索消息时,队列服务API在单个出列操作中支持的最大批大小限制为32。超过此限制将导致运行时异常 有关更多详细信息,请访问此处:服务总线队列无法一次检索多条消息,但您可以

我正在使用Azure Service Bus管理带有webrole和workerrole的邮件


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

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

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


有关更多详细信息,请访问此处:

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


如果您真的需要批量读取消息,请考虑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)
List messageLockTokenList=new List();
foreach(BrokeredMessages列表中的BrokeredMessage消息)
{
messageLockTokenList.Add(message.LockToken);
}
messageReceiver.CompleteBatch(messageLockTokenList)

为什么需要在不循环的情况下执行此操作?例如,我希望每次调用函数时都能收到10条消息是的,但为什么?你就不能循环10次,每次读取一条消息吗?我想OP是在询问服务总线队列,而不是Windows Azure存储队列。但是+1,因为它确实是从队列批量读取消息的唯一方法。