【问题标题】:Azure: How to Delete "DeadLettered" Messages from Service Bus queueAzure:如何从服务总线队列中删除“死信”消息
【发布时间】:2015-02-25 17:00:50
【问题描述】:

我想从服务总线队列中删除死信消息。 特别是,这个值称为 DeadLetterMessageCount,您可以通过右键单击 SB 的“属性”找到它在项目的服务器资源管理器中排队(如果使用 SB 队列)。

我想这样做是因为我已经设置了云服务的自动缩放。因此,当 SB 队列很大时,它会添加更多内核以更快地处理消息(它启用更多工作角色)。我意识到,当您根据队列中的消息数量设置缩放时,它也会计算 DeadLettered 消息(无法使用的消息)。 所以这是浪费金钱,因为启用了更多不需要的实例。

如有任何疑问,请告诉我。

感谢您的帮助

【问题讨论】:

  • "我意识到,当您根据队列中的消息数量设置缩放时,它也会计算 DeadLettered 消息" - 您是否有任何指向您在哪里找到这些信息的?
  • @Haohmaru 我对此不确定,但我会向您解释我的结论。在 Microsoft Azure 仪表板的右栏中,有一个名为“队列长度”的字段。这显示了队列中的消息数,活动的和死信的。这是扩展考虑的数量,以更改所需的实例数量。如果您有不同的意见,请告诉我

标签: c# azure servicebus azure-servicebus-queues azure-scheduler


【解决方案1】:

您从死信队列中读取和删除消息的方式与从普通队列或订阅中读取的方式相同。

可以使用此方法获取队列的路径:QueueClient.FormatDeadLetterPath(queuePath)

另请参阅之前的答案:How do I delete a DeadLetter message on an Azure Service Bus Topic

【讨论】:

    【解决方案2】:

    这是从队列中删除死信消息的代码。

    public async void DeleteMessagesFromQueueAsync()
        {
            bool isDeadLetter=true;
            long SequenceNumber = 12;
            string queuePath='queue name';
            string connectionString='connection string of ASB Namespace';
    
            BrokeredMessage _srcMessage = null;
            DeleteMessageResponse _msgDeletionStatus = new DeleteMessageResponse();
            MessageReceiver fromQueueClient = null;
            try
            {
                MessagingFactory factory = MessagingFactory.CreateFromConnectionString(connectionString);
    
                string _fromEntityPath = !isDeadLetter ? queuePath : QueueClient.FormatDeadLetterPath(queuePath);
    
                fromQueueClient = await factory.CreateMessageReceiverAsync(_fromEntityPath, ReceiveMode.PeekLock);
    
                    BrokeredMessage _message = await fromQueueClient.ReceiveAsync(SequenceNumber);
                    if (_message != null)
                        _srcMessage= _message;
    
                if (_srcMessage != null )
                {  
                        await _srcMessage.CompleteAsync();
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                if (fromQueueClient != null)
                    await fromQueueClient.CloseAsync();
            }
        }
    

    【讨论】:

      【解决方案3】:

      您可以使用“ReceiveAndDelete”模式和“ReceiveBatchAsync”快速从 DeadLetterQueue 中删除

      private async void button1_Click(object sender, EventArgs e)
              {
                  try
                  {
                      var DLQPath = "/$DeadLetterQueue"; ///**** Important - Pointing to DLQ'
      
                      var topicName = "message";
                      var sub = "message-subscription";
                      int batchSize = 100;
      
                      runProcess = true;
      
                      _subscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionSt, topicName, sub + DLQPath, ReceiveMode.ReceiveAndDelete);
      
                      int cnt = 0;
      
                      do
                      {
                          var messages = await _subscriptionClient.ReceiveBatchAsync(batchSize);
                          var msgCount = messages.Count();
      
                          if (msgCount == 0)
                          {
                              break;
                          }
                          cnt += msgCount;
                          labelCount.Text = cnt.ToString();
                      }
                      while (runProcess);
      
                      _subscriptionClient.Close();
      
                  }
                  catch (Exception ex)
                  {
                      MessageBox.Show(ex.GetBaseException().Message);
                      return;
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2020-01-08
        • 2017-02-13
        • 2017-08-13
        • 2017-06-07
        • 2020-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        相关资源
        最近更新 更多