Так что в общем решение может быть следующим. Вам нужно перенаправить вызов на какую-то конечную точку, которая поместит запрос для дальнейшей обработки и т. Д. c. Эта часть может быть реализована с использованием подхода JMS, это может быть любая реализация, такая как ActiveMQ, RabbitMQ et c. Вы должны выбрать брокера в соответствии с вашими потребностями и ожиданиями.
Когда запрос приходит со шлюза, вы перенаправляете на конечную точку и просто помещаете сообщение в очередь, другая служба прослушивает сообщения из этой очереди и обрабатывает их.
Другим подходом является использование пакетного задания sprint для обработки некоторой логики c et c. Когда клиент выполняет вызов, он проходит через шлюз, затем шлюз перенаправляет запрос на конечную точку микросервиса, а затем вы сохраняете запрос в базе данных и возвращаете клиенту 202. Затем, используя пакетное задание через cron process logi c.
Преимущества использование первого подхода - потеря связи между микросервисами, асинхронная обработка и простота масштабирования.
При работе с пружинным пакетным заданием или при любом планировщике могут возникнуть трудности при масштабировании, поскольку необходимо каким-то образом запускать только одно задание одновременно для нескольких экземпляры. Для решения этой проблемы вы можете использовать библиотеку schedlock.
В случае политики повторных попыток обработки, когда запрос был принят, MOM (промежуточное программное обеспечение, ориентированное на сообщения) будет проще, в случае неудачной транзакции для него предусмотрены некоторые конфигурации повторных попыток.
Использование весенних пакетных заданий вам нужно управлять состоянием запроса в базе данных и не запускать запрос с состоянием «обработано» и т. д. c.