2015-10-15 1 views
0

У меня есть обработчик NServiceBus, который обрабатывает события создания Tiff. Как правило, создание TIFF может занять 1-5 минут. Я использую NHibernatePersistence и SqlServerTransport в конфигурации шины.NServiceBus обработка долгого хода - Транзакция

В то время как обработчик создает Tiff, связанная таблица шины базы данных блокируется. Таким образом, любые другие события фактически стоят в очереди.

Есть ли способ разрешить другие события Tiff, пожалуйста?

+1

Вы хостинг messagehandlers для других сообщений в этой конечной точке, а? В этом случае вам следует рассмотреть возможность переноса долговременного процесса на отдельную конечную точку, предназначенную только для создания TIFF. Настройте эту конечную точку с более длинным таймаутом транзакции или полностью отключите транзакции. – janovesk

ответ

1

По умолчанию все действия с базой данных являются частью распределенной транзакции.

Вы не совсем поняли тип блокировки, который хотите предотвратить. Если это действительно блокировка таблицы, как она получила блокировку таблицы?

Если вы не хотите блокировки, то

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

http://docs.particular.net/nservicebus/messaging/transactions#transactions-ambient-transaction-isolation-level

BusConfiguration busConfiguration = new BusConfiguration(); 
busConfiguration.Transactions().IsolationLevel(IsolationLevel.RepeatableRead);