Мне нужно вызвать 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!')
Я не хочу использовать обратный вызов в качестве примера документа.Мой код работает, но я не уверен в его производительности и утечке памяти.Есть ли лучший способ сделать это?И насколько хорош мой код?