【问题标题】:Azure Service Bus - Leave messageAzure 服务总线 - 留言
【发布时间】:2021-12-30 11:22:24
【问题描述】:

(仅供参考 - 我是新的 ASB)

关于 Azure 服务总线的几个问题:

  1. 您如何从队列中获取消息但将其留在那里直到其 TTL 过期?我原以为只是不调用 CompleteMessageAsync 就可以做到这一点,但无论如何它似乎都会被删除。

  2. 如何从队列中获取消息,但只有在特定接收者收到时才出队(删除)?

Message.ApplicationProperties["ReceiverId"].ToString() == "123" // 现在你可以删除它了

谢谢

【问题讨论】:

    标签: c# azure azureservicebus


    【解决方案1】:

    如何从队列中获取消息但将其保留在那里直到其 TTL 过期?

    您可以查看消息而不是接收消息。问题是邮件将一次又一次地被拾取,直到传递计数超过最大值并且邮件将死信,这是您不希望发生的。我会回顾一下你在这里想要实现的目标,因为它是一个矛盾的设置。您希望消息有一个 TTL 以防止它被拾取,但是您希望在 TTL 继续过期之前对其进行探测。

    如何从队列中获取消息,但只有在特定接收者收到时才出队(删除)?

    我的建议是不要为此使用队列。如果您以特定目的地为目标,请使用您的实体拓扑来表达它。例如:发布关于某个主题的消息,并根据订阅者标识进行不同的订阅。这样您就可以为特定订阅者提供消息,其中逻辑订阅者可以横向扩展。

    【讨论】:

      【解决方案2】:

      1-使用 PeekMessage:

      您可以查看队列中的消息,而无需将它们从队列中删除 通过调用 PeekMessages 方法来处理队列。如果你没有通过 maxMessages 参数的值,默认是偷看一个 消息。

      //-------------------------------------------------
      // Peek at a message in the queue
      //-------------------------------------------------
      public void PeekMessage(string queueName)
      {
          // Get the connection string from app settings
          string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
      
          // Instantiate a QueueClient which will be used to manipulate the queue
          QueueClient queueClient = new QueueClient(connectionString, queueName);
      
          if (queueClient.Exists())
          { 
              // Peek at the next message
              PeekedMessage[] peekedMessage = queueClient.PeekMessages();
      
              // Display the message
              Console.WriteLine($"Peeked message: '{peekedMessage[0].Body}'");
          }
      }
      

      https://docs.microsoft.com/en-us/azure/storage/queues/storage-dotnet-how-to-use-queues?tabs=dotnet

      2-你也可以使用PeekMessage,检查你想要的属性(ReceiverId),如果是正确的,只需完成消息:

      // ServiceBusReceiver 
      await receiver.CompleteMessageAsync(receivedMessage);
      

      【讨论】:

        猜你喜欢
        • 2018-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2014-10-20
        • 2012-10-03
        相关资源
        最近更新 更多