Azure 在没有循环的情况下从队列接收多条消息
我正在使用Azure Service Bus管理带有webrole和workerrole的邮件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。超过此限制将导致运行时异常 有关更多详细信息,请访问此处:服务总线队列无法一次检索多条消息,但您可以
我需要知道如何在不使用循环的情况下一次从队列中获取多条消息。从队列中检索消息时,在单个存储事务中将多条消息批处理在一起。队列服务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,因为它确实是从队列批量读取消息的唯一方法。