Я ищу шаблон и существующие реализации для моей ситуации: У меня есть синхронный soa, который использует REST API, на самом деле я реализую удаленный вызов процедур с помощью REST. И у меня есть несколько медленных воркеров, которые обрабатывают запросы довольно долго (около 30 секунд), и из-за некоторых лицензионных ограничений для некоторых запросов я могу обрабатывать их только последовательно (см. настройка системы).
Каковы рекомендуемые способы реализации связи для такого случая?
Как я могу смешивать синхронную и асинхронную связь в ситуации, когда потребитель находится за брандмауэром, и я не могу легко отправить ему уведомление о выполненных задачах, и я не могу позволить потребителю использовать моего брокера сообщений, если он у меня есть?
Рабочие реализованы на Python с использованием Flask и gunicorn. На данный момент я использую синхронные интерфейсы REST и допускаю задержку, так как у меня были только быстрые рабочие. Я посмотрел на Kafka и RabbitMq, и они подошли для серверной части. общение, однако как производитель общается с потребителем?
Если потребитель запускает запрос API, мой производитель может вернуть код 202, то как производитель должен уведомить потребителя о том, что результат доступен? Должен ли потребитель опрашивать производителя для получения результатов?
Кроме того, если я использую брокеры сообщений, а мой шлюз действует от имени потребителя, он должен иметь реестр запросов (теперь у меня уже есть GUID для каждого запроса) и результатов, какой подход вы бы порекомендовали для его реализации?
Производитель-агент, который производит сообщение
Потребитель — агент, который может обработать сообщение и реализовать логику обработки сообщения.
опрос легче реализовать, чем веб-сокеты, и требует только усилий по разработке REST API. Сказав, что использование веб-сокетов или gRPC было бы идеальным. github.com/vinta/awesome-python#websocketmedium.com/@martin.sikora/…
Спасибо за предложение, по сути вы предлагаете реализовать механизм опроса. Есть ли лучшие альтернативы, такие как веб-сокеты, для уведомления о результатах? Можете ли вы указать на некоторые проекты @github?