Краткий обзор нашей топологии:
Веб-сайты отправляют команды на сервер nServiceBus, который принимает команды и затем публикует правильные события публикации / подписки. У этой службы также есть обработчики сообщений, которые могут выполнять некоторые операции с БД в ответ на команду, например:
1 пользователь регистрируется на веб-сайте 2 веб-сайт отправляет команду nServicebus службе nServicebus на другом сервере. 3 Сервер nServicebus имеет обработчик для этого конкретного типа команды, который регистрирует что-то в базе данных и отправляет приветственное письмо.
С момента внедрения этой архитектуры у нас начались тупиковые ситуации в БД. Я отследил это до MSDTC на сервере базы данных. Если я выключу эту службу на сервере базы данных, nServicebus начнет выдавать ошибки, что для меня показывает, что nServiceBus подключает обновление БД в транзакции.
Я не хочу, чтобы это произошло, я хочу сам справиться с ошибкой БД, я хочу, чтобы транзакция обеспечивала доставку сообщения в мою прокси-службу nServicebus. Я не хочу, чтобы транзакция из Интернета проходила через 2 сервера в БД и обратно.
Какие-либо предложения?
РЕДАКТИРОВАТЬ: этот пост дает некоторые подсказки, однако я не совсем уверен, что это правильный способ продолжить .. NServiceBus - Проблема с использованием TransactionScopeOption.Suppress в обработчике сообщений
EDIT2: Причина, по которой мы хотим, чтобы БД работала вне области транзакции, заключается в том, что намерение состоит в том, чтобы «асинхронно» обрабатывать эти команды на другом сервере, чтобы не замедлять работу веб-сайта и / или заставлять пользователей ждать так долго. выполнение команд агрегации. Если БД находится в рамках транзакции, блокирует ли это выполнение на веб-сайте в точке, где исходная команда отправляется дистрибьютору? Есть ли лучшая архитектура nServicebus для этого сценария? Мы хотим, чтобы команда запускалась быстро и возвращала управление веб-сайту, чтобы пользователь мог быстро продолжить работу и не ждать нашей долгой работы команды БД, которая обновляет совокупные счетчики и отправляет электронные письма и т. Д.