【问题标题】:Resubmitting Expired Dead Letter Message back to Queue将过期的死信消息重新提交回队列
【发布时间】:2017-02-22 14:16:29
【问题描述】:

我在 Azure 服务总线死信队列中有大量消息。当我看到消息时,我发现大部分消息都已过期。

我想知道当我们尝试将过期的死信队列消息重新提交回其原始队列时会发生什么?

谁能帮我解释一下?

谢谢!

【问题讨论】:

    标签: azure servicebus dead-letter


    【解决方案1】:

    我想在下面回答你的两个问题,

    当您从死信队列收到过期消息以处理/重新提交到主队列时(使用 ReceiveAsync() 接收消息),消息的状态将更改为延迟状态。因此,该消息将无法再在死信队列中接收。

    关于您的问题,当您重新提交时该消息会发生什么,它将作为新消息提交到目标队列中。

    【讨论】:

      【解决方案2】:

      我们可以使用FormatDeadLetterPath() method 为指定的死信队列路径构建格式名称,并创建接收器并从DLQ 中检索消息。如果您想将消息重新提交回主队列,您可以根据 DLQ 中检索到的消息创建并发送新消息。并且您可以通过检查 DeadLetterReasonDeadLetterErrorDescription 属性来调查为什么消息被死信。

      This link用示例解释死信队列,请参考。

      【讨论】:

      • Han - 我可以重新提交 DLQ 消息。但是这里我说的是过期的死信队列消息。就像我们将过期的 DLQ 消息重新提交回 QUEUE 时发生的情况一样。它肯定不会得到进程。
      • what happens when we re-submit the expired DLQ message back to the QUEUE. 这取决于您如何处理主队列中的这些消息(您重新提交)。例如,如果没有作业处理来自您的主队列的消息,则这些消息将在其中过期,并且可能会再次传递给 DLQ。
      • 当我们在队列中收到一条消息时,我将该消息转换为 JSON 并将其存储在 blob 存储中。但我在 BLOB 中也看不到 JSON 消息,在 DLQ 中也看不到。在这里我的问题是是否处理了过期的消息?
      • 嗨@Amit,我了解您担心重新提交的过期死信消息是否会被接收应用程序处理?不是吗?当您重新提交 TTLExpired 死信消息时,它将作为新消息排队并重置 TTL。此消息将由正在侦听的下游应用程序接收。其实这才是重发消息的真正目的。
      猜你喜欢
      • 2017-12-11
      • 2017-06-07
      • 2015-09-23
      • 2020-02-14
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 2018-09-04
      相关资源
      最近更新 更多