Как избежать callback-ада, используя asyncio в python - PullRequest
0 голосов
/ 01 мая 2018

У меня следующая ситуация.
У меня есть 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() оба проходят через процесс, описанный выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...