Как реализовать коммуникацию между потребителем и производителем с быстрыми и медленными работниками?

Я ищу шаблон и существующие реализации для моей ситуации: У меня есть синхронный soa, который использует REST API, на самом деле я реализую удаленный вызов процедур с помощью REST. И у меня есть несколько медленных воркеров, которые обрабатывают запросы довольно долго (около 30 секунд), и из-за некоторых лицензионных ограничений для некоторых запросов я могу обрабатывать их только последовательно (см. настройка системы).

Каковы рекомендуемые способы реализации связи для такого случая?

Как я могу смешивать синхронную и асинхронную связь в ситуации, когда потребитель находится за брандмауэром, и я не могу легко отправить ему уведомление о выполненных задачах, и я не могу позволить потребителю использовать моего брокера сообщений, если он у меня есть?

Рабочие реализованы на Python с использованием Flask и gunicorn. На данный момент я использую синхронные интерфейсы REST и допускаю задержку, так как у меня были только быстрые рабочие. Я посмотрел на Kafka и RabbitMq, и они подошли для серверной части. общение, однако как производитель общается с потребителем?

Если потребитель запускает запрос API, мой производитель может вернуть код 202, то как производитель должен уведомить потребителя о том, что результат доступен? Должен ли потребитель опрашивать производителя для получения результатов?

Кроме того, если я использую брокеры сообщений, а мой шлюз действует от имени потребителя, он должен иметь реестр запросов (теперь у меня уже есть GUID для каждого запроса) и результатов, какой подход вы бы порекомендовали для его реализации?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Производитель-агент, который производит сообщение Потребитель — агент, который может обработать сообщение и реализовать логику обработки сообщения.

Спасибо за предложение, по сути вы предлагаете реализовать механизм опроса. Есть ли лучшие альтернативы, такие как веб-сокеты, для уведомления о результатах? Можете ли вы указать на некоторые проекты @github?

June Croot 30.05.2019 13:59

опрос легче реализовать, чем веб-сокеты, и требует только усилий по разработке REST API. Сказав, что использование веб-сокетов или gRPC было бы идеальным. github.com/vinta/awesome-python#websocketmedium.com/@martin.sikora/…

Krishna 31.05.2019 07:13

Другие вопросы по теме