2012-03-27 52 views
0

我正在与医疗系统合作(除其他外)将处理患者数据的更新。有没有办法控制NServiceBus经销商如何分配消息?

我们将尝试将我们的系统扩展到多台机器以提高性能。

但是,我担心分发邮件可能导致错误顺序的更新。

下面是一个例子:

我的MSMQ顶部的两个消息是对患者的更新请求。第一个将中间名改为“Bob”,第二个将中间名改为“Bill”。 (所以最后中间的名字应该是“比尔”。)

我有一个distrubtor设置发送消息给MachineA和MachineB。两者都能够处理消息,但MachineA是一台慢得多的机器(或者其他进程会加载它或由于其他原因而更慢)。

如果分销商将第一条消息发送给MachineA,将第二条消息发送给MachineB,则MachineB消息将首先完成并将名称更新为“Bill”。然后MachineA完成,中间名更新为“Bob”。

所以我最终以“鲍勃”作为中间名而不是“比尔”。

我需要一种方法告诉经销商这两个消息应该去同一台机器和同一个线程。逻辑明智的做法并不难,但我需要一种插入分销商的方式来做到这一点。

我想要做的逻辑将是这样的:经销商会保留队列正在处理的患者ID列表,然后检查该ID的新消息。如果任何队列都对标识的工作,然后,要么等待,直到它完成或只是确保相同的队列获取消息。)

或者,确实NServiceBus一些如何确保这些交易将只在提交订购?(我正在使用分布式事务。)

+0

是否可以将这些消息打包在您的Bus.Send()中。它需要一个IMessage数组。 – 2012-03-27 18:37:35

+0

@AdamFyles - 我想会是的。这将涉及到我的客户端(发送数据流)的一些批处理。但我想我可以做到。我已阅读(在我发布这个问题之后),使用数组可以使它们保持在同一台机器和线程上(正是我正在寻找的内容)。如果您发布将数组作为答案一起发送的想法,我会接受它。 – Vaccano 2012-03-27 19:31:36

回答

1

当您使用NSB发送()消息时,您可以发送和IMessage数组。这将发送一批将在单个事务处理中处理的消息。消息应按顺序处理。

相关问题