我有一个填充了邮件的Microsoft Message Queue。如果处理消息有问题,我想重试该消息,我不想重试消息immidiatley。 有没有办法在MSMQ中为消息添加延迟,以避免它在一定时间内可用???
另一种选择是拥有另一个队列(一个重试队列)并每15分钟读取一次该队列,但我宁愿不这样做。
答案 0 :(得分:1)
您正在寻找的是“毒药消息处理”(即使它不是消息错误,但是临时环境问题)。
有很多文章。以下是一些:
Poison Message Handling in MSMQ 3.0
Poison Message Handling in MSMQ 4.0
Surviving poison messages in MSMQ
简而言之:您必须将它们移动到重试队列。
答案 1 :(得分:1)
所以我最近看到一些代码在异常逻辑中处理这个问题,代码有一个内置的重试步骤,在延迟后尝试。它失败了,等待了一段特定的时间,然后再试一次。
基本上它递归尝试一定次数(每次延长延迟)。相当整洁,没有理由再排队。有很多泛型和委托用于执行方法。不知道是否可以这样做。我怀疑你仍然想要处理消息无法与另一个队列一起交付的情况。