Для простоты я буду ссылаться как на ControlInputQueue дистрибьютора, так и на StorageQueue, как на одну и ту же.Я понимаю, как клиент дистрибьютора уведомляет о своей доступности, записывая запись в ControlInputQueue и как дистрибьютор перемещает запись в свою StorageQueue, чтобы отслеживать, какие клиенты доступны для работы.Проще объяснить, если я отношусь к ним так же.Итак ...
Я создал подтверждение концепции, чтобы продемонстрировать поведение дистрибьютора NServiceBus.Как и ожидалось, когда клиент запускается, он добавляет запись в StorageQueue дистрибьютора.Когда сообщение приходит к распространителю (через его InputQueue), распространитель удаляет запись из своего StorageQueue и пересылает сообщение указанному клиенту.Клиент выполняет свою работу, а затем добавляет запись обратно в StorageQueue дистрибьютора.Таким образом, в StorageQueue дистрибьютора имеется не более одной записи (для каждого клиента).
Моя проблема возникает, когда клиент выключается, либо вручную, либо неожиданно (например, при взлете сервера).Запись клиента по-прежнему существует в StorageQueue распространителя, поэтому, насколько распространитель знает, этот клиент все еще доступен.Это нормально, за исключением того, что когда клиент запускается снова, он добавляет еще одну запись в StorageQueue.Итак, теперь в StorageQueue есть две записи для одного клиента.
Есть ли способ убедиться, что у дистрибьютора есть только одна запись StorageQueue для любого данного клиента?