Архитектура архива воспроизведения сообщений NServiceBus - PullRequest
3 голосов
/ 12 марта 2011

Я создаю приложение, которое должно сохранять копии отправляемых им сообщений, чтобы я мог воспроизвести все сообщения на более позднем этапе.Это необходимо, потому что обработка сообщений существенно изменится в ходе разработки, но данные должны быть собраны как можно скорее, поскольку это данные наблюдений в реальном времени.Кажется, я не могу найти какую-либо встроенную функциональность, которая бы напрямую решала эту проблему, и хотя я мог бы написать собственный инструмент для сохранения данных, это, кажется, противоречит цели использования NServiceBus в первую очередь.Некоторые варианты, которые я рассматриваю:

  1. Используйте функциональность ForwardReceivedMessagesTo шины Target для создания очереди архива и создайте простое приложение, которое использует эту очередь архива в качестве входной очереди для простой пересылкисообщения на целевую шину всякий раз, когда запускается инструмент воспроизведения.Это очищает очередь архива, требуя ее резервного копирования сначала с помощью утилиты mqbkup, но это может быть автоматизировано как часть процесса воспроизведения.Альтернативно, использование двух чередующихся очередей архива (одна принимает новые сообщения, а другая для воспроизведения) может решить эту проблему.

  2. Используйте модель публикации / подписки и попросите архиватора подписаться на целевую очередь, поместив сообщение в очередь архива.Инструмент Replayer, аналогичный приведенному выше, может использовать очередь Archive в качестве входной очереди и пересылать сообщения в Target.Это также очистило бы очередь архива, требуя одного из указанных выше решений.

  3. Пользователи MassTransit упоминают что-то под названием BusDriver , которое позволяет копировать между очередями, но я не могу найтичто-нибудь еще об этом.

Моя основная задача - выбрать подход, который с наименьшей вероятностью может потерять данные, поскольку после проведения наблюдения его уже никогда нельзя будет сделать за пределами узкого временного окна.,Кажется, это должно быть распространенной проблемой, и все же я не могу найти прямого решения.Предложения?

Обновление Я решил пойти с записанной в очередь Целевой очередью.Я сделаю так, чтобы архиватор использовал журнал в качестве входных данных и сохранял сообщения в базе данных (может быть только на основе файлов), а также позволял воспроизводить сообщения из этой базы данных в целевую очередь.Хотя можно было бы написать инструмент, который копирует сообщения из очереди журнала в целевую очередь, реальная проблема - с практической точки зрения - заключается в управлении очередью журнала: его нельзя легко скопировать (mqbkup сбрасываетслужба MSMQ (что недопустимо) и неразрушающая работа в очереди требует от меня написания инструмента на основе MSMQ, когда я предпочитаю придерживаться уровня абстракции NServiceBus.В конечном счете, MSMQ - это транспорт, а не хранилище сообщений, поэтому с ним нужно обращаться как с таковым.

Ответы [ 2 ]

1 голос
/ 06 июня 2012

# 3 Ссылка командной строки BusDriver:

BusDriver is a command-line utility used to administer queues, service bus instances and other things related to MassTransit.

Command-Line Reference

  busdriver.exe [verb] [-option:value] [--switch]

    help, --help        Displays help

    count               Counts the number of messages in the specified
                        queue

      -uri              The URI of the queue

    peek                Displays the body of messages in the queue without
                        removing the messages

      -uri              The URI of the queue
      -count            The number of messages to display

    move                Move messages from one queue to another

      -from             The URI of the source queue
      -to               The URI of the destination queue
      -count            The number of messages to move

    requeue             Requeue messages from one queue to another

      -uri              The URI of the queue
      -count            The number of messages to move

    save                Save messages from a queue to a set of files

      -uri              The URI of the source queue
      -file             The name of the file to write to (will have .1, .2
                        appended automatically for each message)
      -count            The number of messages to save
      --remove          If set, the messages will be removed from the queue

    load                Load messages from a set of files into a queue

      -uri              The URI of the destination queue
      -file             The name of the file to read from (will have .1, .2
                        appended automatically for each message)
      -count            The number of messages to load
      --remove          If set, the message file will be removed once the
                        message has been loaded

    trace               Request a trace of messages that have been received
                        by a service bus

      -uri              The URI of the control bus for the service bus
                        instance
      -count            The number of messages to request

        status          Request a status probe of the bus at the endpoint

          -uri          The URI of the control bus for the service bus instance

    exit, quit          Exit the interactive console (run without arguments
                        to start the interactive console)

Examples:

    count -uri:msmq://localhost/mt_server
        Returns the number of messages that are present in the local
        MSMQ private queue named "mt_server"

    peek -uri:msmq://localhost/mt_client
        Displays the body of the first message present in the local
        MSMQ private queue named "mt_client"

    trace -uri:msmq://localhost/mt_subscriptions
        Requests and displays a trace of the last 100 messages received
        by the mt_subscriptions (the default queue name used by the
        subscription service, which is part of the RuntimeServices)

    move -from:msmq://localhost/mt_server_error -to:msmq://localhost/mt_server
        Moves one message from the mt_server_error queue to the mt_server
        queue (typically done to reprocess a message that was previously
        moved to the error queue due to a processing error, etc.)
1 голос
/ 12 марта 2011

Первый вариант кажется жизнеспособным. Я хотел бы добавить, что NSB поставляется с инструментом ReturnToSourceQueue.exe, который будет воспроизводить сообщения для вас. Вы можете включить ведение журнала, чтобы хранить сообщения, но что-то должно было бы это убрать, поскольку оно не катится. У нас есть NetApp, и мы использовали его SnapMirror для резервного копирования данных очереди, я уверен, что есть похожие вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...