我有一个双向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系统)中管理两个通道(每个方向一个)是否实用?