/ examples / rpc_server.py
rpc_server.py
 1  """
 2      RPC server, aioamqp implementation of RPC examples from RabbitMQ tutorial
 3  """
 4  
 5  import asyncio
 6  import aioamqp
 7  
 8  
 9  def fib(n):
10      if n == 0:
11          return 0
12      elif n == 1:
13          return 1
14      else:
15          return fib(n-1) + fib(n-2)
16  
17  
18  @asyncio.coroutine
19  def on_request(channel, body, envelope, properties):
20      n = int(body)
21  
22      print(" [.] fib(%s)" % n)
23      response = fib(n)
24  
25      yield from channel.basic_publish(
26          payload=str(response),
27          exchange_name='',
28          routing_key=properties.reply_to,
29          properties={
30              'correlation_id': properties.correlation_id,
31          },
32      )
33  
34      yield from channel.basic_client_ack(delivery_tag=envelope.delivery_tag)
35      
36  
37  @asyncio.coroutine
38  def rpc_server():
39  
40      transport, protocol = yield from aioamqp.connect()
41  
42      channel = yield from protocol.channel()
43  
44      yield from channel.queue_declare(queue_name='rpc_queue')
45      yield from channel.basic_qos(prefetch_count=1, prefetch_size=0, connection_global=False)
46      yield from channel.basic_consume(on_request, queue_name='rpc_queue')
47      print(" [x] Awaiting RPC requests")
48  
49  
50  event_loop = asyncio.get_event_loop()
51  event_loop.run_until_complete(rpc_server())
52  event_loop.run_forever()
53  
54