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

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

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

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

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

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

Спасибо!


person Marco    schedule 09.05.2015    source источник


Ответы (1)


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

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

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

person janovesk    schedule 10.05.2015
comment
Странно, в ссылке на документацию об этом не сказано - person Marco; 11.05.2015
comment
@Sarmaad с EF 6 вы можете повторно использовать существующую транзакцию, чтобы вы могли использовать ITransaction в спящем режиме. Я считаю, что это то, что, по словам Яновеска, нам нужно будет сделать. - person Marco; 11.05.2015