NServiceBus — как убедиться, что SagaData синхронизирована между рабочими серверами?

В NServiceBus 4.6.5 сообщения отправляются на рабочие серверы с использованием алгоритма циклического перебора.

У меня есть кое-какие данные в Sagas для обнаружения рассинхронизации бизнес-сообщений. Эти данные хранятся в базе данных Oracle.

Как убедиться, что все серверы постоянно используют одни и те же SagaData (синхронизированные), чтобы, если один сервер вносил изменения в эти SagaData, другие серверы SagaData автоматически становились недействительными и обновлялись?

Я читал это и в NServiceBus 4.6.5 Я реализую интерфейс ISagaPersister и сохраняю все в базе данных Oracle.

Спасибо


person Miguel Domingos    schedule 23.05.2018    source источник


Ответы (1)


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

Если вы настроите конфигурацию NHibernate, если вы ее используете, вы сможете настроить кэширование 2-го уровня в NHibernate, но этого следует избегать, если вы используете несколько серверов, если только вы не используете распределенный кеш.

person Ramon Smits    schedule 23.05.2018