【问题标题】:NServiceBus exception handling and message retry mechanismNServiceBus 异常处理和消息重试机制
【发布时间】:2012-12-13 22:41:14
【问题描述】:

我们计划在我们的应用程序中使用 NServiceBus 来调度消息。 在我们的例子中,每条消息都有timeToLive 属性,定义了应该处理该消息的时间段。

对于第一次尝试消息处理不成功的情况,我们的计划是将其移动到特定的重试存储(重试队列),然后在成功处理或timeToLive 时重试消息(重试之间有一些超时)过期了。

如果timeToLive 过期,我们计划记录消息内容并丢弃消息。

实际上,这种重试行为主要是由我们正在实现的协议决定的。

有没有办法用 NServiceBus 实现这种行为?我明白了,不成功的消息会发送到特定的error queue。是否可以创建一个单独的总线,指向错误队列?

【问题讨论】:

    标签: c# .net exception-handling nservicebus


    【解决方案1】:

    我建议您有一个单独的进程来监控错误队列,根据您描述的逻辑执行重试。看看 nservicebus 自带的 ReturnToSourceQueue 工具来获得灵感:

    http://nservicebus.svn.sourceforge.net/viewvc/nservicebus/trunk/src/tools/management/Errors/ReturnToSourceQueue/NServiceBus.Tools.Management.Errors.ReturnToSourceQueue/Class1.cs?view=markup

    我有一篇关于如何处理失败的博文,也可能会给你一些想法: http://andreasohlund.net/2010/03/15/errorhandling-in-a-message-oriented-world/

    希望这会有所帮助!

    【讨论】:

    • 谢谢你,安德烈亚斯。在问这个问题之前我已经红了你的文章)。你能告诉我是否可以在一个进程中托管许多消息总线?没问题还是 nservicebus 不支持这个?或者可能会因为多辆巴士在一个流程中工作而受到严重的性能处罚?
    • 在默认配置模式下,每个应用域只能有一个总线。问题是您可能希望将错误队列放在单独的机器上,并让所有其他进程将它们的错误移到那里。然后,您将有一个从该错误队列中馈送的单个进程/总线执行您自己的自定义逻辑。
    • 你可能想修复你的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2016-03-21
    • 1970-01-01
    相关资源
    最近更新 更多