NServicebus和消息处理程序命令

时间:2011-10-19 16:42:16

标签: handler message nservicebus

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

发生的事情是发送电子邮件的处理程序首先运行并且它已经崩溃(由于配置错误),它被重试了五次,但每次都进行了包装,既没有发送电子邮件也没有导出到外部系统。修复配置很简单,但它向我们展示了我们的设计缺陷。

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

原始讯息:

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

我们拥有自己的主机,我知道您可以将订单指定为:     NServiceBus.Configure.With()     ...     .UnicastBus()     .LoadMessageHandlers(First.Then()。AndThen()。AndThen()// etc)

假设我们有消息处理程序H1_1,H1_2(处理类型1的消息,H1_1在H1_2之前执行)相应的H2_1,H2_2(处理类型2的消息)和H3-H6(唯一处理消息的处理器)类型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>(),对于所有其他类型,由于只有一个处理程序,因此不需要规范吗?

非常感谢您 - 非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

在3.0版本中,出于这些原因,我们将支持ISpecifyMessageHandlerOrdering的多个实现。

相关问题