Использование NHibernate для обновления таблицы состояния во время длительного процесса

Я унаследовал проект, который реализует несколько длительных процессов. Каждый из этих процессов обновляет таблицу состояния, которая затем отображается в пользовательском интерфейсе с помощью опроса ajax. Эти процессы выполняются в фоновом приложении, которое использует Rhino Service Bus (с MSMQ), и этот процесс запускается отправкой сообщения "выполнить длинный процесс".

Сам процесс выполняет все виды обработки данных, проверки, обновления, вставки, удаления и т. Д. В многочисленных таблицах.

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

Мой вопрос к специалистам NHibernate / RSB: как бы вы обновили таблицу состояний во время выполнения длительного процесса?

Я думал о:

  • отправка "сообщения об обновлении состояния" во время выполнения процесса (потребуется решить проблемы управления сессиями NHibernate / RSB).
  • использование саги с сохранением базы данных и запросом функций ajax вместо таблицы состояния

1 ответ

Проблема с обновлениями состояния в процессе RSB заключается в том, что обычно обработка сообщений происходит внутри самой области транзакции. Это означает, что любые изменения в базе данных или отправленных вами сообщениях (как правило) будут видны другим приложениям только после совершения транзакции (что происходит после завершения обработки сообщения).

Я обычно использую 3 подхода:

  1. обернуть обновления в TransactionScope, который подавляет внешнюю транзакцию (я подозреваю, что это то, что происходит в данный момент)
  2. разбить процесс на более мелкие сообщения (это может снизить конкуренцию в базе данных, но за счет увеличения количества сообщений)
  3. извещать внешних клиентов посредством какого-либо другого процесса (например, иметь какой-либо сервис удаленного взаимодействия / WCF / rest, который могут запрашивать другие процессы, или отправлять уведомления через какой-то процесс, неосведомленный о транзакции)
Другие вопросы по тегам