pub / sub с транзакциями и обработкой ошибок с помощью MassTransit - PullRequest
3 голосов
/ 27 февраля 2012

Пожалуйста, помогите мне начать

Я занимался серфингом в задние выходные, извините, мой французский, но не нашел того, что искал.

Это процесс, который я пытаюсь переместить в очередь сообщений

  • Каждую ночь на наш ftp-сервер попадают pdf-файлы, около 45 000.
  • Для каждого файла создается запись на сервере MS SQL в таблице очередей
  • Служба читает очередь и обрабатывает файлы на диске.

Это то, что я хочу pub / sub с транзакциями и обработкой ошибок

  • File-watcher пишет в очередь в транзакции вместо базы данных. Это, я думаю, быстрее.
  • Затем я хочу подписаться на pdf-очередь, чтобы мне не приходилось опрашивать базу данных при появлении нового файла. прибывает.

некоторые вопросы

  • Как мне опубликовать в очереди с транзакциями?
  • Как получить сообщение из очереди, а затем прервать его, если при обработке сообщения произошла ошибка.
  • Как лучше всего открывать / закрывать соединения очереди? Есть ли легкий объект сессий?

И да, я знаю, что есть простой пример pub / sub :-), но я не могу склеить все это вместе

Любая помощь очень ценится.

1 Ответ

4 голосов
/ 27 февраля 2012

Как опубликовать в очереди с транзакциями?

Если очередь транзакционная, при настройке шины используйте msmq://machine/queue_name?tx=true, чтобы MassTransit знал, что это транзакционная очередь. Теперь это означает, что все задействованные машины должны иметь возможность регистрироваться в DTC. Это может или не может быть тривиальным для установки. Это предполагает использование MSMQ. Я бы предложил использовать RabbitMQ, если вам не нужно регистрироваться в распределенной транзакции.

Как получить сообщение из очереди и затем прервать его, если при обработке сообщения возникла ошибка.

MassTransit поддерживает автоматические повторные попытки (5x?) В транзакционных очередях MSMQ, если обнаружена ошибка. Вы также можете перехватить ошибку и RetryLater(), чтобы вернуть ее в очередь.

Как лучше всего открывать / закрывать соединения очереди? Есть ли легкий объект сессий?

Если вы используете MassTransit, MT обрабатывает все объекты подключения для вас. Нет необходимости открывать / закрывать соединения с очередями.

На самом деле, вы можете сделать Bus.Instance.Publish(new FileArrivedMessage(filename)) в службе прослушивания файлов; а на стороне потребителя просто зарегистрируйте Consumes<FileArrivedMessage>.All реализацию. Каждый из них нуждается в своей очереди, но должен быть в состоянии общаться довольно легко.

Вы также всегда можете получить дополнительную помощь из списка рассылки MT. https://groups.google.com/forum/#!forum/masstransit-discuss

...