2010-03-15 52 views
3

我们计划在我们的应用程序中使用NServiceBus来调度消息。 在我们的例子中,每条消息都有timeToLive属性,定义了处理这个消息的时间段。NServiceBus异常处理和消息重试机制

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

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

实际上,这种重试行为主要取决于我们正在实施的协议。

有什么办法可以用NServiceBus来实现这样的行为吗?我明白了,那些不成功的消息去了特定的error queue。是否可以创建一个单独的总线,指向错误队列?

回答

4

我建议你有一个单独的进程,根据你描述的逻辑来监视错误队列的重试次数。看看随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/

希望这帮助!

+0

谢谢你,安德烈亚斯。在提出这个问题之前,我已经写过你的文章了)。 你能告诉我是否有可能在一个进程中托管多条消息总线?可以,或者nservicebus不支持?或者许多巴士在一个过程中工作会受到严厉的性能处罚? – 2010-03-16 09:20:59

+0

在默认配置模式下,每个应用程序域只能有一条总线。问题在于,您可能希望将错误队列放在单独的计算机上,并让所有其他进程在其中移动错误。然后,您将拥有一个单独的进程/总线,从那个错误队列中取出您自己的定制逻辑。 – 2010-03-16 10:01:23

+0

andeas你可能想要修复你的链接 – Simon 2014-02-04 02:40:50