异步AMQP生产者和消费者

时间:2017-04-06 16:19:17

标签: python amqp pika kombu

我有一个双向AMQP服务,它既消耗来自队列的消息又发布到扇出交换。对称的客户端从交换中消耗并发布到队列。 (这不是聊天服务器,但可以很容易地将其视为聊天服务器。)传入和传出消息不是1:1。传出消息可能是响应传入消息,也可能是基于时间或其他异步因素(如数据库更改)生成的。

我目前使用带有BlockingConnection的Pika内置Python,但它需要两个完整的连接(每个都有一个通道)和线程。在AMQP中,通道不是双向的,我还没有找到一种方法来同时使用BlockingConnection管理两个通道。基于时间的消息非常笨拙且有限,因为它们基于connection.sleep()。我已尝试将其转换为SelectConnection,但无法管理两个频道的回调。

我想将此转换为具有两个通道的单个连接的非线程异步系统。我在Python 3.5中工作,所以基于协同程序或asyncio的东西似乎是理想的。我也很高兴离开Pika(我正在探索Kombu,因为我们已经在使用Celery,但我仍然无法处理生产者和消费者;我也看过amqpstorm,虽然我更喜欢异步而不是线程)。唯一的要求是Python 3.5。性能不是最紧迫的问题(我预计不到100 msg /秒);实现简单性和灵活性更为重要。

在Pika(或任何其他Python AMQP系统)管理两个频道,每个方向一个频道是否实用?

1 个答案:

答案 0 :(得分:1)

我不知道您是否找到了解决方案,但有一个 port of pika to support asyncio 值得一试!