NServiceBus 5 без участия DTC?

Я читаю документацию, и следующее смущает меня, потому что в верхней части документа говорится, что с версией 5 мы получаем надежность без использования кода неисправности.

Эти функции были реализованы с использованием шаблона "Исходящие" и шаблона дедупликации. Поскольку сообщение удалено, мы проверяем, обрабатывали ли мы его ранее. Если это так, мы доставляем любые сообщения в исходящие для этого сообщения, но больше не вызываем логику обработки сообщений. Если сообщение не было предварительно обработано, то мы вызываем обычную логику обработчика, сохраняя все исходящие сообщения в долговременном хранилище в той же транзакции, что и пользовательская база данных. Наконец, мы отправляем все исходящие сообщения и обновляем хранилище дедупликации.

Я уверен, что это, вероятно, из-за моего непонимания, но не факт, что NServiceBus открывает свое собственное соединение и транзакцию отдельно от обработчика сообщений (например, вызывает хранилище для сохранения) соединения с базой данных, транзакция будет преобразована в полный 2PC с помощью DTC?

Вот документация:

http://docs.particular.net/nservicebus/outbox/

Спасибо!

1 ответ

Решение

Да, так и будет. Вот почему он делится ими с вами вместо этого.

NServiceBus предоставляет их вам в обработчиках сообщений, чтобы вы могли использовать их повторно и избежать эскалации.

Просто возьмите зависимость от NHibernateStorageContext в вашем конструкторе обработчика сообщений, и это дает вам доступ к правильному NHibernate.ISession а также NHibernate.ITransaction,

Другие вопросы по тегам