Я создаю приложение, которое должно сохранять копии отправляемых им сообщений, чтобы я мог воспроизвести все сообщения на более позднем этапе.Это необходимо, потому что обработка сообщений существенно изменится в ходе разработки, но данные должны быть собраны как можно скорее, поскольку это данные наблюдений в реальном времени.Кажется, я не могу найти какую-либо встроенную функциональность, которая бы напрямую решала эту проблему, и хотя я мог бы написать собственный инструмент для сохранения данных, это, кажется, противоречит цели использования NServiceBus в первую очередь.Некоторые варианты, которые я рассматриваю:
Используйте функциональность ForwardReceivedMessagesTo шины Target для создания очереди архива и создайте простое приложение, которое использует эту очередь архива в качестве входной очереди для простой пересылкисообщения на целевую шину всякий раз, когда запускается инструмент воспроизведения.Это очищает очередь архива, требуя ее резервного копирования сначала с помощью утилиты mqbkup, но это может быть автоматизировано как часть процесса воспроизведения.Альтернативно, использование двух чередующихся очередей архива (одна принимает новые сообщения, а другая для воспроизведения) может решить эту проблему.
Используйте модель публикации / подписки и попросите архиватора подписаться на целевую очередь, поместив сообщение в очередь архива.Инструмент Replayer, аналогичный приведенному выше, может использовать очередь Archive в качестве входной очереди и пересылать сообщения в Target.Это также очистило бы очередь архива, требуя одного из указанных выше решений.
Пользователи MassTransit упоминают что-то под названием BusDriver , которое позволяет копировать между очередями, но я не могу найтичто-нибудь еще об этом.
Моя основная задача - выбрать подход, который с наименьшей вероятностью может потерять данные, поскольку после проведения наблюдения его уже никогда нельзя будет сделать за пределами узкого временного окна.,Кажется, это должно быть распространенной проблемой, и все же я не могу найти прямого решения.Предложения?
Обновление Я решил пойти с записанной в очередь Целевой очередью.Я сделаю так, чтобы архиватор использовал журнал в качестве входных данных и сохранял сообщения в базе данных (может быть только на основе файлов), а также позволял воспроизводить сообщения из этой базы данных в целевую очередь.Хотя можно было бы написать инструмент, который копирует сообщения из очереди журнала в целевую очередь, реальная проблема - с практической точки зрения - заключается в управлении очередью журнала: его нельзя легко скопировать (mqbkup сбрасываетслужба MSMQ (что недопустимо) и неразрушающая работа в очереди требует от меня написания инструмента на основе MSMQ, когда я предпочитаю придерживаться уровня абстракции NServiceBus.В конечном счете, MSMQ - это транспорт, а не хранилище сообщений, поэтому с ним нужно обращаться как с таковым.