У меня есть приложение, которое требует, чтобы наше приложение отправляло уведомление во внешнюю систему в случае возникновения определенного события. Уведомление о внешней системе происходит путем помещения сообщения в очередь JMS.Как хранить/хранить временные данные без использования шаблона проверки претензий?
Требования к транзакциям не такие строгие. Следовательно, вместо использования JTA для такой тривиальной usecase я решил использовать локальную транзакцию JMS, так как весна понимает, как синхронизировать локальную транзакцию JMS с любой управляемой транзакцией (например, транзакцией базы данных), чтобы поднять 1PC.
Проблема, с которой я столкнулся, заключается в том, что уведомление должно быть дополнено некоторыми данными перед отправкой уведомления. Эта дополнительная информация не имеет отношения к моему бизнес-домену, который отвечает за создание события. Таким образом, я не уверен, где временно хранить дополнительные данные, чтобы вернуть их перед отправкой уведомления. Вероятно, ниже иллюстрация может помочь в понимании проблемы.
HTTP Request ---> Rest API ---> Application Domain ---> Создание события ---> Notification
В соответствии с приведенной выше иллюстрации, я не хочу, чтобы передать, что дополнительные данные и загрязняют мой домен, который является частью полезной нагрузки запроса API Rest, отправить уведомление.
Одним из решений, о котором я думал, является использование канала очереди с потоком, чтобы вернуть его перед отправкой уведомления. Таким образом, Rest API запускает процесс, помещая дополнительные данные в очередь, и перед отправкой уведомления я вытащу его из очереди, чтобы обогатить сообщение для уведомления.
Часть, которую я не могу решить в этом решении, заключается в том, что как вытягивать сообщение из очереди, когда я получаю событие где-то в приложении (между созданием события и фазой уведомления).
Если мой подход не имеет никакого смысла, пожалуйста, предложите любое решение без использования шаблона претензии/проверки.
Одна вещь, которую я забыл упомянуть в вопросе, заключается в том, что вызов домена не происходит как часть потока интеграции с пружиной. Если мы хотим сохранить информацию в заголовке, мы должны сделать вызов для обслуживания как часть потока? – Noor
Это зависит от того, как ваш доменный уровень архивирован. Если ваша служба домена является POJO, вызовите ее из ' ', и инфраструктура позаботится о разворачивании полезной нагрузки сообщения для службы и поддержании заголовков для последующего использования. –
Как вы сказали, что вы забыли что-то упомянуть, мы действительно не можем помочь вам без дополнительной информации по этому вопросу. С другой стороны вы всегда можете хранить эту информацию где-то во внешнем хранилище или просто в «RequestAttributes» и использовать «RequestContextHolder» для логики «ThreadLocal». –