Как опубликовать в очереди с транзакциями?
Если очередь транзакционная, при настройке шины используйте 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