NServiceBus - Как убедиться, что SagaData синхронизируется между рабочими серверами?
В NServiceBus 4.6.5 сообщения отправляются на рабочие серверы с использованием алгоритма Round-Robin.
У меня в Sagas есть данные, чтобы обнаружить несинхронизированные деловые сообщения. Эти данные хранятся в базе данных Oracle.
Как убедиться, что все серверы совместно используют одни и те же SagaData (синхронно), чтобы, если один сервер вносит изменения в этот SagaData, другие серверы SagaData автоматически становятся недействительными и обновляются?
Я читал это и в NServiceBus 4.6.5 я реализую интерфейс ISagaPersister и сохраняю все в базе данных Oracle.
Спасибо
1 ответ
Это полностью обрабатывается вашей базой данных. Каждый раз, когда ваша сага получает доступ, ее состояние извлекается из базы данных, это не кэшируется NServiceBus. Это состояние в базе данных либо блокируется оптимистически с использованием оптимистического управления параллелизмом, либо пессимистично с использованием блокировок базы данных, управляемых транзакцией базы данных.
Если вы настраиваете конфигурацию NHibernate, если вы используете ее, то вы можете настроить кэширование 2-го уровня в NHibernate, но этого следует избегать, если вы используете несколько серверов, если вы не используете распределенный кеш.