从队列中读取来自azure服务总线的所有消息

时间:2018-03-29 13:37:53

标签: php azure message-queue azureservicebus azure-servicebus-queues

我想从天蓝色服务总线(队列)中读取所有消息。

我已按照以下指示进行操作 https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-php-how-to-use-queues

目前它正在获取一条消息..

我想从服务总线(队列)中获取所有消息。

先谢谢..

2 个答案:

答案 0 :(得分:2)

我认为不可能指定您希望从队列中读取的消息数量(至少使用PHP SDK,当然可以使用.Net SDK)。基本上receiveQueueMessagePeek-Lock Message (Non-Destructive Read)Receive and Delete Message (Destructive Read)(取决于配置)REST API方法的包装器,它们都只返回一条消息。

解决此问题的一种方法是在循环中运行代码,直到您没有从队列中收到任何消息为止。您可能遇到的问题是,当peek-lock方法获取的锁过期后,您可能会收到重复的消息,该消息将再次可见。

答案 1 :(得分:0)

使用Peek服务总线的操作概念可以读取队列中的所有消息。

MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(<Your_Connection_String>);
var queueClient = messagingFactory.CreateQueueClient(<Your_Queue_Name>, ReceiveMode.PeekLock); // Receive mode is by default PeekLock and hence, optional.
BrokeredMessage message = null;
while(true)
{
  message = queueClient.Peek(); // You have read one message
  if (message == null) // Continue till you receive no message from the Queue
    break; 
}

这也可以返回expiredlocked消息。如果适合您阅读邮件的需求,请快速阅读Message browsing