簡単にするために、ディストリビューターのControlInputQueueとそのStorageQueueの両方を同じものと呼びます。ディストリビューターのクライアントがControlInputQueueにエントリを書き込んでその可用性を通知する方法と、ディストリビューターがエントリをStorageQueueに移動して、どのクライアントが作業に使用できるかを追跡する方法を理解しています。それらを同じものとして扱うと、説明が簡単になります。それで...
NServiceBusディストリビューターの動作を実証するための概念実証を作成しました。予想どおり、クライアントが起動すると、ディストリビューターのStorageQueueにエントリが追加されます。メッセージが(InputQueueを介して)ディストリビューターに着信すると、ディストリビューターはStorageQueueからエントリを削除し、指定されたクライアントにメッセージを転送します。クライアントはその作業を実行してから、ディストリビューターのStorageQueueにエントリを追加し直します。したがって、ディストリビューターのStorageQueueには最大で1つのエントリ(クライアントごと)があります。
私の問題は、クライアントが手動または予期せずにシャットダウンされたときに発生します(サーバーが爆発するなど)。クライアントのエントリは、ディストリビューターのStorageQueueに引き続き存在します。ディストリビューターが知る限り、そのクライアントは引き続き使用可能です。これは問題ありませんが、クライアントが再度起動すると、StorageQueueに別のエントリが追加されます。したがって、1つのクライアントのStorageQueueに2つのエントリがあります。
ディストリビューターが特定のクライアントに対して1つのStorageQueueエントリのみを持つようにする方法はありますか?