【发布时间】:2017-04-06 16:19:16
【问题描述】:
我有一个双向 AMQP 服务,它既可以使用队列中的消息,也可以发布到扇出交换器。客户端对称地从交换中消费并发布到队列中。 (这不是聊天服务器,但很容易将其视为聊天服务器。)传入和传出消息不是 1:1。传出消息可能是对传入消息的响应,也可能是基于时间或其他异步因素(例如数据库更改)生成的。
我目前在 Python 中使用 Pika 和 BlockingConnection 构建了这个,但它需要两个完整的连接(每个都有一个通道)和线程。通道在 AMQP 中不是双向的,我还没有找到一种方法可以使用 BlockingConnection 同时管理两个通道。基于时间的消息非常尴尬和有限,因为它们基于connection.sleep()。我尝试将其转换为 SelectConnection,但在管理两个频道的回调时遇到了问题。
我想将其转换为一个非线程异步系统,其中一个连接有两个通道。我在 Python 3.5 中工作,所以基于协程或异步的东西似乎很理想。我也很高兴离开 Pika(我正在探索 Kombu,因为我们已经在使用 Celery,但我仍然无法同时处理生产者和消费者;我也看过 amqpstorm,虽然我更喜欢异步而不是螺纹)。唯一的要求是 Python 3.5。性能不是最紧迫的问题(我预计不到 100 msg/sec);实现的简单性和灵活性更为重要。
在 Pika(或任何其他 Python AMQP 系统)中管理两个通道,每个方向一个通道是否可行?
【问题讨论】: