У меня есть несколько обработчиков сообщений в конкретной конечной точке, которые выполняют свою работу с базой данных SQL Azure (на данный момент все еще используется локальный экземпляр SQL 2012). У меня есть обработчик команд, который публикует 2 события, называет их X и Y. В той же конечной точке у меня есть подписчик на X и абонент на Y. Оба этих абонента внутренне используют один и тот же компонент доступа к данным, назовите это Z. Dependency инъекция настраивается для каждого вызова, а не для общего доступа.Сделки в NServicebus с использованием Azure Service Bus Transport
Компонент Z использует платформу Entity Framework 6 под занавесками. Проблема, с которой я сталкиваюсь, заключается в том, что просто открытие базы данных бросает исключение SqlException и жалуется на эскалацию MSDTC.
Я временно обернул обработчики в TransactionScope.Suppress, и это остановило ошибку, но я считаю, что мне не хватает чего-то более фундаментального.
Непросто ли конфигурировать конечную точку без транзакций? Я бы подумал, что это будет просто работать, поскольку я настроил использовать Azure Service Bus в качестве механизма транспорта. Если я это сделаю, NServiceBus все равно повторит попытку, если в обработчике сообщений будет создано исключение? (До пределов SLR - не часть вопроса, я также понимаю проблемы идемпотентности).
Используете ли вы SQL Server в качестве транспорта для NServiceBus или как хранилище данных? Что касается транспорта Azure Service Bus - NSB будет повторять исключения с FLR (и SLR, если сконфигурировано), как обычно. –
Это похоже на проблему с конфигурацией, но я пытаюсь понять вашу настройку (какой транспорт NServiceBus вы используете?) –
SQL Server используется исключительно для хранения данных. Я использую Azure Service Bus в качестве транспорта. Я также прочитал, что если бы я сделал это не транзакционным, я бы не получил попытки FLR или SLR? Это верно. –