2011-10-19 171 views
1

对不起,我不清楚。事实上,处理程序之间没有任何依赖关系,其中一些只处理相同类型的消息。例如,在我们的系统中,我们处理的发票,非常简化这种情况发生时的发票到达系统:一个“InvoiceArrived”消息被发送到nservicebus和两件事情应该发生,关于发票的信息应该被发送到外部系统和应该将电子邮件发送给要处理发票的人(根据发票上的信息不同的人)。这两件事对彼此没有依赖性,但对外部系统的导出非常重要,而电子邮件则不那么重要。NServicebus和消息处理顺序

事情是这样的处理程序发送电子邮件已运行第一和它crached(由于恶劣的配置),它被重试五次,但每次既不电子邮件,也没有出口到外部系统crached发生。修复配置很简单,但是它在我们的设计中给我们带来了一个缺陷。

我现在已经意识到我们必须重新考虑设计,因为指定处理程序的运行顺序并不能解决任何问题,因为相反的情况也是不可取的,它首先运行导出处理程序,然后在电子邮件中运行处理程序导致五次重试和五次成功导出(但没有成功的电子邮件)。我想我们将要发送一个消息类型为每个处理器...

原始邮件:

我们正在使用NServiceBus建立处理程序的一些事件,每发送一个唯一的消息类型总线(目前6个,但数量正在增长)。其中一些事件(目前是2个)有多个处理程序,我们希望它们按照每种消息类型的特定顺序执行。

我们有我们自己的主机,我知道你可以为指定的顺序: NServiceBus.Configure.With() ... .UnicastBus() .LoadMessageHandlers(First.Then()AndThen()。假设我们有相应的H2_1,H2_2(处理类型2的消息)和H3-H6的消息处理程序H1_1,H1_2(都处理类型1的消息H1_1在H1_2之前执行) (仅处理类型3-6的消息)

当然,我们可以通过指定所有处理程序来管理此操作

.LoadMessageHandlers(First<H1_1>.Then<H1_1>().Then<H2_1>() //etc) 

但这意味着我们每次添加一个新的处理程序,我们必须添加配置,

是有可能写

.LoadMessageHandlers(First<H1_1>.Then<H2_1>()) //and all the other handlers are run there after? 

那当然会更好,但仍, H1_1和H2_1与对方没有任何关系,并且不会以任何方式在同一条消息上运行。有没有办法每个消息类型来指定,即对于类型1和First<H1_1>.Then<H1_2>() 2型First<H2_1>.Then<H2_2>()和用于所有其它类型的不规范是必要的,因为仅存在一个处理程序?

非常感谢你提前 - 任何帮助将不胜感激!

+0

,你有你的处理程序之间许多依赖性可能是您的设计需要一些调整的迹象,这一事实。你能否给我们详细说明这些处理程序在做什么,以及为什么它们执行的顺序很重要? –

+0

它也听起来像你可能会受益于将每组消息类型移动到不同的端点。这可以让你按不同的顺序排列,但我同意Andreas,这听起来像我们需要更多的细节。 –

回答

1

在3.0版本中,我们要支持ISpecifyMessageHandlerOrdering的多个实现了整整这些原因。

相关问题