2015-05-09 7 views
1

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

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

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

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

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

Спасибо!

ответ

1

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

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

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

+0

Так что если я использую EF, это не будет работать. Правильно? – Sarmaad

+0

Странно, ссылка на документацию не упоминает об этом – Marco

+0

@Sarmaad с EF 6, вы можете повторно использовать существующую транзакцию, чтобы вы могли смириться с hibernates ITransaction. Я считаю, что это то, что говорит Яновесск, что нам нужно будет сделать. – Marco