У меня следующая ситуация.
У меня есть 3 услуги JobInitiator
, Mediator
, Executor
, которые разговаривают друг с другом следующим образом.
-
JobInitiator
один раз каждые X минут публикует в очередь (RabbitMQ) запрошенное задание
- Служба
Executor
каждые Y минут отправляет вызов API REST в службу Mediator
и спрашивает, нужно ли выполнить какие-либо задания. Если это так - Mediator
извлекает сообщение из очереди и возвращает сообщение службе Executor
в ответе.
- После того как
Executor
завершит выполнение задания - он отправляет результаты задания в API в службе Mediator
, которая публикует их в очереди, которую прослушивает JobInitiator
.
Дополнительные замечания + ограничения и ограничения:
- Служба
Mediator
- это просто оболочка REST API для моей очереди. Основная проблема заключается в том, что сервис Executor
не может быть доступен публично - разрешены только исходящие вызовы API.
- Я не могу подключить очередь напрямую из
JobInitiator
к Executor
службе
До сих пор - ничего особенного в этом процессе. Что меня интересует, так это возможность написать это с помощью asyncio на python, поэтому я не буду иметь дело с адом обратного вызова. Примерно так (псевдокод)
class JobInitiator(object):
def do_job():
token = await get_token()
applicative_results = await get_results(token=token)
, где get_token()
и get_results()
оба проходят через процесс, описанный выше.