【问题标题】:Can we turn messages from Dead Letter queue to Active message?我们可以将死信队列中的消息转换为活动消息吗?
【发布时间】:2020-07-31 22:01:01
【问题描述】:

我有从 Azure 服务队列读取贷款号码并为每个贷款号码调用我的 API 的点网代码。

这是我调用 api 的代码

private async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
            try
            {
                string loanNumber = Encoding.UTF8.GetString(message.Body);
                _logger.LogInformation($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} LoanNumber:{loanNumber}");

                //API CALL HERE
               await _apiClient.getResult(loanNumber);
               await _queueClient.CompleteAsync(message.SystemProperties.LockToken);
            }
            catch (Exception ex)
            {
                //sending failed messages to Dead Letter queue
                await _queueClient.AbandonAsync(message.SystemProperties.LockToken);
            }
        }

失败的贷款号码被成功发送到死信队列。当服务器关闭或来自 API 响应的错误请求时。

我想在死信队列中的贷款号码经过一定时间后调用 api。 有什么方法可以在一定间隔后将死信队列中的消息转换为活动消息??

我是天蓝色的新手。请帮我解决问题。

提前致谢。

【问题讨论】:

  • 是的,可以通过开箱即用的Serverless360实现。它具有内置的自动化功能,您可以在定义的时间间隔后自动将 DLQ 消息重新提交到主队列。

标签: azure .net-core azureservicebus


【解决方案1】:

有没有办法将死信队列中的消息转换为 一段时间后的活动消息??

自动,不。但是,您可以做的是从死信队列中读取消息,然后将它们作为新消息发布到您的主队列中。

就整个过程的自动化而言,一种可能的解决方案是运行一个计时器触发的 Azure 函数,该函数定期从死信队列中读取消息并将它们发布到您的主队列中。

【讨论】:

  • 您是否有使用时间触发的 azure 函数每隔一小时从 DLQ 读取一次的示例代码?
  • 很遗憾我没有,抱歉!基本上逻辑将非常简单 - 从 DLQ 读取消息并在主队列中发布消息。您必须确保只接收 1 小时之前在 DLQ 中排队的消息,而不是所有消息。
【解决方案2】:

@akhil,值得注意的是,这些消息将自动在主队列中重新排队,直到它们的 DeliveryCount 超过主队列的 MaxDeliveryCountMaxDeliveryCount 的默认值为 10,因此任何对 API 的失败请求都会被此处理程序重试 10 次,然后才会移至 DLQ。

如果您想在这方面“更聪明一点”,您可以使用 catch 块中消息的 Scheduled​Enqueue​Time​Utc 属性延迟重试。

正如@Gaurav Mantri 所说,该框架没有提供任何“免费”处理死信消息的功能;您必须自己编写处理程序,就像编写普通队列一样。

【讨论】:

    【解决方案3】:

    不,没有办法将 DLQ 消息转换为活动消息。

    您需要处理 DLQ 并修复它在 DLQ 中结束的原因,然后将其重新传输回您的队列。

    来自 Github 的示例在这里很有用。

    https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/Microsoft.ServiceBus.Messaging/DeadletterQueue

    (此示例展示了如何将消息移动到死信队列、如何从中检索消息以及将更正的消息重新提交回主队列。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 2018-03-31
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      相关资源
      最近更新 更多