gpt4 book ai didi

c# - 在 MassTransit 延迟后如何进行自动重试(又名重试周期,二级重试)

转载 作者:行者123 更新时间:2023-11-30 22:05:13 25 4
gpt4 key购买 nike

我正在设置一个消息队列,其中消息的使用偶尔会失败一段时间(例如,由于网络停机),在这种情况下,我想在一段时间后重试。

这在 MSMQ 的 WCF 绑定(bind)中可用,名称为 retry cycles并在名称为 second-level retries 的 NServiceBus 中. MassTransit 中有类似的东西吗?

我无法在 MassTransit 文档中找到这个问题的答案。我能在论坛上找到的最接近答案的是this thread。这表明答案是否定的,但提供了一些解决方法,主要涉及在一段时间内阻塞消耗线程。我宁愿有一个更像我上面提到的两个的实现,它继续处理其他消息,直到重试延迟结束。

最佳答案

我认为 MassTransit 中没有内置的方法来处理这个问题。

让我们考虑一下您想要重试的动机。您提到网络停机时间。这很有意义,也是在再次重试消息之前注入(inject)某种延迟的一个很好的理由。

然而,考虑到这种情况,如果存在某种网络停机时间,同样的网络停机时间是否会影响队列中的其他消息,这难道不合乎情理吗?所以,事实上,阻塞消费者线程实际上并不是问题。所有消息都不会成功,所以让我们稍等片刻,稍后再试。

这是假设队列中的所有消息都在做几乎相同的事情(例如,它们都在生成一些数据,这些数据将保存到已关闭的数据库服务器中)。

但是,如果您的队列中有许多不同的消息类型,那么我完全可以理解为什么您不想阻止对这些其他消息的处理。也许现在是查看您的消费者的架构并查看将它们分成多个专门构建的队列是否有意义的好时机。

关于c# - 在 MassTransit 延迟后如何进行自动重试(又名重试周期,二级重试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com