阅读所有死信队列消息

时间:2019-05-09 16:59:41

标签: azureservicebus

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

由提问者编辑:

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

  

邮件被锁定后,从同一队列或订阅中接收的其他客户端可以进行锁定,并检索不在活动锁定下的下一个可用邮件。当邮件的锁被明确释放或锁到期时,邮件会在重新定位的检索顺序的开头或附近弹出。

edit2:我不知道这个重要文件是怎么丢失的:Here还是这样。