Я пытаюсь реализовать данные контекста сеанса для системы обмена сообщениями в очереди.
Обработка сеанса происходит следующим образом: приложение переднего плана аутентифицирует себя и получает идентификатор сеанса.После этого идентификатор сеанса включается в заголовки сообщения, поэтому обработчику сообщений предоставляется контекст, например, для проверки безопасности и ведения журнала аудита.Клиент может забрать сеанс в случае его сбоя и продолжить работу.
Так что теперь мы хотим связать пары ключ / значение с идентификатором сеанса.Но это создает много проблем параллелизма, если данные сеанса изменяются, так как данные сеанса, используемые обработчиком сообщения, должны быть такими, чтобы в момент отправки сообщения.
Я вижу два возможных решения:
- Поместите связанные данные сеанса в каждый заголовок сообщения.
- Сохраните версионные данные сеанса в базе данных и используйте идентификатор версии в заголовке сообщения.
Первое увеличивает сообщениявторая увеличивает размер сессионной БД и создает много инфраструктурного кода.Я должен сохранить самые последние значения в БД в обоих, чтобы клиент мог продолжить свою работу, если он потерпел неудачу или потерял соединение.
Есть ли другие решения?Я склонен использовать первое решение, но сначала хочу получить отзывы.
Как с этим справляются другие (например, JMS / NServiceBus / Masstransit)?
Обновление на основе ответа: I´Мы выбрали способ убедить членов моей команды использовать данные сеанса только во внешнем интерфейсе и поместить их в сообщения, если это требуется для обработчика сообщений.