У меня такая ситуация.
У меня есть 3 службы JobInitiator, Mediator, Executor, которые разговаривают друг с другом следующим образом.
JobInitiator один раз каждые X минут помещает в очередь (RabbitMQ) запрошенное задание.Executor каждые Y минут отправляет вызов REST API службе 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() оба проходят процесс, описанный выше.
@ user4815162342 - извините за частичный комментарий. Проблема здесь в том, что работа, которую выполняет потребитель в Mediator, сама по себе является асинхронной, поэтому потребитель ответа в JobInitiator должен различать контексты. Знаете ли вы какую-либо библиотеку rabbitmq, которая использует это сохранение асинхронного контекста?
может это поможет. Пожалуйста, дайте мне знать, если у вас все заработает: github.com/pika/pika/tree/…





Определенно можно использовать
await, как вы описываете, вам просто нужно использовать библиотеки с поддержкой asyncio для базовой связи (например, aiohttp для вызовов REST). Ваш заголовок, кажется, просит об этом как, но это определенно слишком широко для объема вопроса SO.