为简单起见,我将分发器的 ControlInputQueue 和它的 StorageQueue 都称为相同的。我了解分销商的客户端如何通过向 ControlInputQueue 写入条目来通知其可用性,以及分销商如何将条目移动到其 StorageQueue 以跟踪哪些客户端可用于工作。如果我将它们视为相同,则更容易解释。所以...
我创建了一个概念证明来演示 NServiceBus 分发器的行为。正如预期的那样,当客户端启动时,它会在分发服务器的 StorageQueue 中添加一个条目。当一条消息进入分发器(通过它的 InputQueue)时,分发器从它的 StorageQueue 中删除一个条目,并将消息转发给指定的客户端。客户端执行它的工作,然后将一个条目添加回分发者的 StorageQueue。因此,分发者的 StorageQueue 中最多有一个条目(每个客户端)。
我的问题发生在客户端手动或意外关闭时(如服务器爆炸)。客户端的条目仍然存在于 Distributor 的 StorageQueue 中,因此据分发者所知,该客户端仍然可用。这很好,除了当客户端再次启动时,它会在 StorageQueue 中添加另一个条目。因此,现在单个客户端的 StorageQueue 中有两个条目。
有没有办法确保分发者对于任何给定的客户端都只有一个 StorageQueue 条目?