Распространитель NServiceBus: предотвращение дополнительных записей в StorageQueue после перезапуска клиента - PullRequest
0 голосов
/ 10 декабря 2011

Для простоты я буду ссылаться как на ControlInputQueue дистрибьютора, так и на StorageQueue, как на одну и ту же.Я понимаю, как клиент дистрибьютора уведомляет о своей доступности, записывая запись в ControlInputQueue и как дистрибьютор перемещает запись в свою StorageQueue, чтобы отслеживать, какие клиенты доступны для работы.Проще объяснить, если я отношусь к ним так же.Итак ...

Я создал подтверждение концепции, чтобы продемонстрировать поведение дистрибьютора NServiceBus.Как и ожидалось, когда клиент запускается, он добавляет запись в StorageQueue дистрибьютора.Когда сообщение приходит к распространителю (через его InputQueue), распространитель удаляет запись из своего StorageQueue и пересылает сообщение указанному клиенту.Клиент выполняет свою работу, а затем добавляет запись обратно в StorageQueue дистрибьютора.Таким образом, в StorageQueue дистрибьютора имеется не более одной записи (для каждого клиента).

Моя проблема возникает, когда клиент выключается, либо вручную, либо неожиданно (например, при взлете сервера).Запись клиента по-прежнему существует в StorageQueue распространителя, поэтому, насколько распространитель знает, этот клиент все еще доступен.Это нормально, за исключением того, что когда клиент запускается снова, он добавляет еще одну запись в StorageQueue.Итак, теперь в StorageQueue есть две записи для одного клиента.

Есть ли способ убедиться, что у дистрибьютора есть только одна запись StorageQueue для любого данного клиента?

1 Ответ

0 голосов
/ 04 июня 2012

В интересах предоставления «официального» ответа на этот вопрос ... Согласно приведенному выше комментарию Андреаса, кажется, что нет способа предотвратить эти дублирующиеся записи в NServiceBus v2.6, но есть в v3+0,0.Таким образом, решение заключается в обновлении.; -)

...