NServiceBus分发服务器:在客户端重新启动后阻止StorageQueue中的额外条目

时间:2011-12-09 20:17:27

标签: nservicebus nservicebus-distributor

为简单起见,我将同时指代经销商的ControlInputQueue和它的StorageQueue。我了解分销商的客户如何通过向ControlInputQueue写入条目以及分销商如何将条目移动到其StorageQueue以跟踪哪些客户端可用于工作来通知其可用性。如果我将它们视为相同,那就更容易解释。所以......

我已经创建了一个概念证明来证明NServiceBus分发服务器的行为。正如预期的那样,当客户启动时,它会向分销商的StorageQueue添加一个条目。当消息进入分发服务器(通过它的InputQueue)时,分发服务器从其StorageQueue中删除一个条目,并将消息转发给指定的客户端。客户端执行它的工作,然后将一个条目添加回分销商的StorageQueue。因此,分销商的StorageQueue中最多只有一个条目(每个客户端)。

当客户端手动或意外关闭(如服务器爆炸)时,会出现问题。客户的条目仍然存在于分销商的StorageQueue中,因此,只要分销商知道,该客户端仍然可用。这很好,除了当客户端再次启动时,它会向StorageQueue添加另一个条目。所以现在StorageQueue中有两个条目用于单个客户端。

有没有办法确保经销商只为任何给定的客户提供一个StorageQueue条目?

1 个答案:

答案 0 :(得分:0)

为了提供一个"官员"回答这个问题... Per Andreas'上面的评论,似乎没有办法防止NServiceBus v2.6中的这些重复条目,但在v3.0中有。所以解决方案是升级。 ; - )