【问题标题】:Reading all messages from azure service bus from queue从队列中读取来自 azure 服务总线的所有消息
【发布时间】:2020-12-18 23:25:43
【问题描述】:

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

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

目前它获取一条消息..

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

提前致谢..

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 如果我在循环中运行代码......那么我需要从队列中删除消息,receiveQueueMessage 函数总是从队列中返回第一条消息......是他们在不从队列中删除消息的情况下进行迭代的方式......
    • 这取决于队列上的锁定持续时间设置。例如,如果您将此属性设置为 1 分钟,则第一条消息将在 1 分钟后重复。
    【解决方案2】:

    通过Service bus的Peek操作概念,可以读取一个Queue中的所有消息。

    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 的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多