text: import asyncio
  from functools import partial
  from aio_pika import connect, IncomingMessage, Exchange, Message
  import json
  
  def fib(n):
      if n == 0:
          return 0
      elif n == 1:
          return 1
      else:
          return fib(n-1) + fib(n-2)
  
  
  async def on_message(exchange: Exchange, message: IncomingMessage):
      with message.process():
          # n = int(message.body.decode())
          req=json.loads(message.body.decode())
          n=req['n']
  
          print(" [.] fib(%d)" % n)
          response = str(fib(n)).encode()
  
          await exchange.publish(
              Message(
                  body=response,
                  correlation_id=message.correlation_id
              ),
              routing_key=message.reply_to
          )
          print('Request complete')
  
  
  async def main(loop, queue_name):
      # Perform connection
      connection = await connect(
          "amqp://guest:guest@localhost/", loop=loop
      )
  
      # Creating a channel
      channel = await connection.channel()
  
      # Declaring queue
      queue = await channel.declare_queue(queue_name)
  
      # Start listening the queue with name 'hello'
      await queue.consume(
          partial(
              on_message,
              channel.default_exchange
          )
      )
  
  
  if __name__ == "__main__":
      loop = asyncio.get_event_loop()
      loop.create_task(main(loop, 'rpc_queue_1'))
  
      # we enter a never-ending loop that waits for data
      # and runs callbacks whenever necessary.
      print(" [x] Awaiting RPC requests")
      loop.run_forever()
  