Asyncio RabbitMQ RPC - PullRequest
       61

Asyncio RabbitMQ RPC

0 голосов
/ 26 февраля 2019

Мне нужно вызвать RPC из моего приложения python-asyncio.Довольно просто отправить данные через rabbitmq с помощью aio-pika.Но как лучше всего получать данные?Если другой сервис будет неисправен?Мы должны отловить ошибку тайм-аута.

channel = await rabbit_mq.channel() # type: aio_pika.Channel
exch = await ch.declare_exchange(name='SomeExchange') # type: aio_pika.Exchange

queue = await ch.declare_queue(auto_delete=True) # type: aio_pika.Queue

message = aio_pika.Message(body=b'Some data for send')
message.correlation_id = uuid.uuid()
message.reply_to = queue.name

await exch.publish(message=message, routing_key='SomeQueue')

# now we have to wait message from another server or getting timeout error

async def task_for_wait_message(queue):
    try:
        async for msg in queue:
        print('Received message:', msg)
        return msg
    finally:
        print('Nothing...')

try:
    msg = await asyncio.wait_for(task_for_wait_message(queue), timeout=5)
    print('Got message: ', msg.body)
except asyncio.TimeoutError:
    print('Timeout error!')

Я не хочу использовать обратный вызов в качестве примера документа.Мой код работает, но я не уверен в его производительности и утечке памяти.Есть ли лучший способ сделать это?И насколько хорош мой код?

...