4

我正在使用Azure服务总线来管理带有卷动和workerrole的消息。从无队列的队列接收多条消息

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

+0

为什么你需要这样做没有循环? – Frans

+0

例如,我希望每次调用函数 – GoodSpeed

+0

时都收到10条消息,但是为什么?你不能只循环10次,每次读一条消息吗? – Frans

回答

4

服务总线队列没有同时检索多个消息的方式,但你可以设置了预取,这里的消息将被缓存(导致更快的性能)。有关预取的更多信息here

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

2

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

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

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

+1

我想OP是询问服务总线队列,而不是Windows Azure存储队列。 –

+0

但是+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)