项目作者: mwfrojdman

项目描述 :
Pythonic AMQP library for asyncio
高级语言: Python
项目地址: git://github.com/mwfrojdman/ammoo.git
创建时间: 2016-12-26T16:26:37Z
项目社区:https://github.com/mwfrojdman/ammoo

开源协议:Other

下载


ammoo

Pythonic AMQP library for asyncio

Remote procedure call example

RPC Server

  1. import asyncio
  2. from ammoo import connect
  3. async def server():
  4. async with await connect('amqp://rabbitmq-server/') as connection:
  5. async with connection.channel(prefetch_count=3) as channel:
  6. await channel.declare_queue('request_queue')
  7. await channel.declare_exchange('my_exchange', 'direct')
  8. await channel.bind_queue('request_queue', 'my_exchange', 'request')
  9. n = 0
  10. async with channel.consume('request_queue') as consumer:
  11. async for message in consumer:
  12. body = message.decode()
  13. print('Received message {}: {} (as bytes: {!r})'.format(n, body, message.body))
  14. if message.properties.reply_to is not None:
  15. print('Replying to RPC request')
  16. await message.reply(json={'n': n, 'body': body})
  17. await message.ack()
  18. n += 1
  19. if __name__ == '__main__':
  20. loop = asyncio.get_event_loop()
  21. loop.run_until_complete(server())
  1. # python rpc_server.py
  2. Received message 0: first (as bytes: b'first')
  3. Replying to RPC request
  4. Received message 1: second (as bytes: b'second')
  5. Replying to RPC request
  6. Received message 2: third (as bytes: b'third')
  7. Replying to RPC request

RPC Client

  1. import sys
  2. import asyncio
  3. from ammoo import connect
  4. async def client(body):
  5. async with await connect('amqp://rabbitmq-server/') as connection:
  6. async with connection.channel() as channel:
  7. reply_queue_name = (await channel.declare_queue('', exclusive=True)).queue_name
  8. print('Expecting replies to queue {}'.format(reply_queue_name))
  9. async with channel.consume(reply_queue_name, no_ack=True) as consumer:
  10. await channel.publish('my_exchange', 'request', body, reply_to=reply_queue_name)
  11. async for message in consumer:
  12. reply_json = message.json()
  13. assert reply_json['body'] == body
  14. print('My message was number {} received by server'.format(reply_json['n']))
  15. break
  16. if __name__ == '__main__':
  17. body = sys.argv[1]
  18. loop = asyncio.get_event_loop()
  19. loop.run_until_complete(client(body))
  1. # python rpc_client.py first
  2. Expecting replies to queue amq.gen-mHXRv6P4WyfG_QAEIsa4wQ
  3. My message was number 0 received by server
  4. # python rpc_client.py second
  5. Expecting replies to queue amq.gen-RrZlLiHZSp8We4Ee0nkg4A
  6. My message was number 1 received by server
  7. # python rpc_client.py third
  8. Expecting replies to queue amq.gen-Op0XhCr7HQRR7tY8sCknVQ
  9. My message was number 2 received by server

Installation

  1. pip install ammoo

You’ll need Python ≥ 3.5.

To contribute