我最近一直在阅读消息系统,并专门研究了RabbitMQ和NServiceBus。据我了解,如果一条消息由于某种原因失败,它会立即再次尝试多次。然后,两个系统都提供了稍后重试的可能性,例如 5 秒后重试。当五秒钟过去后,消息会再次发送多次。
我引用了 Vaughn Vernon 在实现领域驱动设计(p.502) 中的话:
处理此问题的另一种方法是简单地重试发送直到它成功,可能使用 Capped Exponential Back-off。在 RabbitMQ 的情况下,重试可能会失败很长一段时间。因此,结合使用消息 NAK 和重试可能是最好的方法。尽管如此,如果我们的进程每五分钟重试三次,这可能就是我们所需要的。
对于 NServiceBus,这称为二级重试,当重试发生时,会发生多次。
为什么它需要发生多次?为什么它不是每五分钟重试一次?五分钟后第一次重试失败和第二次重试(可能只是几毫秒后)成功的机会是多少?
如果由于某些配置不需要它(是吗?),为什么我发现的所有示例都有多次重试?