配置/编码NServiceBus以延迟重试消息的最佳方法是什么?
在默认配置中,重试几乎立即发生,直到配置文件中定义的尝试次数为止。理想情况下,我想在一小时后再次重试等等。
另外,HandleCurrentMessageLater()
如何运作? Later
方面指的是什么?
答案 0 :(得分:6)
NSB重试可以解决临时问题,例如死锁等。通过创建另一个监视错误队列的进程并按照您喜欢的时间间隔将它们放回源队列,可以更好地处理更长的重试。请查看NSB附带的ReturnToSourceQueue.exe以供参考。
编辑:NServiceBus现在支持此功能,我们称之为Second Level Retries,有关详细信息,请参阅http://docs.particular.net/
答案 1 :(得分:4)
这是一篇关于为什么NServiceBus不包含我在他的分布式系统架构课程中向Udi提出同样问题后写的重试延迟的博客文章:
NServiceBus Retries: Why no back-off delay?
这是一个讨论线程,涵盖了构建错误队列监视/重试端点所涉及的一些要点:
http://tech.groups.yahoo.com/group/nservicebus/message/10964
就HandleCurrentMessageLater()而言,所做的只是将当前消息放回队列的末尾。如果没有其他消息在等待,它将立即再次处理。
答案 2 :(得分:4)
从NServiceBus 3.2.1开始,它们提供了一个现成的解决方案,可以在连续消息出现故障时处理延迟。以前存在的重试机制仍然会在没有延迟的情况下重试故障,以处理数据库死锁,快速自我修复网络问题等情况。
一旦按照配置的次数重试了消息,消息就会移动到“二级重试”队列。如下配置的此队列将在10秒,20秒和30秒延迟后重试,然后该消息将被移动到配置的错误队列。您可以将这些值更改为更适合您环境的值。
您还可以查看此链接: http://docs.particular.net/nservicebus/second-level-retries