【问题标题】:Read All Dead Letter Queue messages读取所有死信队列消息
【发布时间】:2019-09-27 13:49:19
【问题描述】:

我能够阅读 DLQ 消息。其中有 4000 个。而且我确信我只能阅读其中的 250 或 270 个。其余的消息只是重复自己。我认为这与接收时间有关:

IMessage msg = deadletterReceiver.receive(Duration.ofMinutes(10));

我这样做几秒钟或几分钟,没关系。我只能阅读其中的 250-260 个,然后重复相同的内容。是否有其他方法可以读取所有 4k DLQ 消息?

我不想这样做deadletterReceiver.completeAsync(message.getLockToken()); 还,因为它会删除消息,而那些 DLQ 消息是无价的。

【问题讨论】:

  • 您正在阅读和完成的消息吗?如果没有,根据MaxLockDuration,您将再次开始收到相同的消息。
  • 不,我没有完成它们。我会查一下 MaxLockDuration。

标签: azureservicebus


【解决方案1】:

发生的情况如下 - 死信队列有一个 MaxLockDuration,在此期间您应该完成消息处理。如果您不这样做,该消息将重新出现在队列中,您将再次使用它。消息的最长锁定时间为 5 分钟。你可以分批阅读,对那些死信消息做你需要做的事情,然后完成它们。都在MaxLockDuration 时间内。

我还建议您确保这样做transactionally,以免丢失任何死信。

由提问者编辑:

这是文档中最相关的部分:

当消息被锁定时,从同一队列或订阅接收的其他客户端可以锁定并检索下一个未处于活动锁定状态的可用消息。当消息上的锁被显式释放或锁过期时,消息会在检索顺序的前面或附近弹出以重新传递。

edit2:我不知道这个重要文件是如何丢失的:Here 又是这样。

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 2012-09-23
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2015-05-13
    • 2012-12-28
    相关资源
    最近更新 更多