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