В наших приложениях SpringBoot есть сценарий, в котором приложение-запросчик отправляет событие запроса (скажем, запрос цитаты), на которое может ответить несколько приложений.Через некоторое время, основываясь на ответах (кавычках), запрашивающий должен выбрать наилучшее решение и отправить фактический запрос (скажем, заказ) конкретному приложению-ответчику.Шаги ниже:
- Приложение-запросчик отправляет событие для получения кавычек.
- Отвечающее приложение отправляет обратно ответы с цитатой.
- После того, как запрашивающий период должен найтилучше всего процитировать и поставить запрос конкретному респонденту.
Мы уже используем RabbitMQ и Redis для других задач.Таким образом, мы планируем использовать RabbitMQ для событий запроса / ответа на котировку и подумать об использовании Redis для хранения ответов на котировку до времени, чтобы выбрать лучшую цитату .
Ниже приведены два варианта, о которых мы думаем:
1.Использование Redis : Создание записи с TTL при отправке цитаты и прослушивание события истечения срока действия.По истечении срока действия проверьте ответы и найдите лучший.Проблема в том, что у нас есть несколько экземпляров и как убедиться, что только один экземпляр обрабатывает событие expiry .Кроме того, Наш Redis имеет несколько узлов , что, по-видимому, связано с истечением срока действия и событиями.
- Использование RabbitMQ : Другой вариант - отправить сообщение для отложенного обмена вместе с первоначальными запросами котировки .Сам запросчик прослушивает сообщение, и когда сообщение от отложенного обмена наконец читается, тогда лучшая цитата может быть идентифицирована и обработана.Проблема в , мы можем получить около 10K сообщений , что может замедлить обработку.(группировка гарантирует, что только один экземпляр потребляет сообщение) Также насколько надежен отсроченный обмен для реализации производства ?
Хотел проверить некоторые соображения по поводу двух вышеупомянутых подходов, некоторые плюсы/ минусы, а лучшие подходы или альтернативы?