【发布时间】:2016-11-07 10:47:29
【问题描述】:
架构
考虑一个带有数据库记录的系统。每条记录可以处于live 或expired 状态; live 记录应使用外部软件模块定期处理。
我已经使用经典的生产者 - 使用 Kombu 和 RabbitMQ 的消费者架构解决了这个问题。生产者每隔几秒钟从数据库中获取记录,消费者处理它们。
问题
live 事件的数量变化很大,在高峰时段消费者无法处理负载,队列被数千个项目堵塞。
我想让系统自适应,这样如果队列为空,生产者就不会向消费者发送新事件。
我尝试了什么
- 搜索 Kombu 文档/API
- 检查队列对象
- 使用 RabbitMQ REST API:
http://<host>:<port/api/queues/<vhost>/<queue_name>。它有效,但它是另一种需要维护的机制,我更喜欢 Kombu 中的优雅解决方案。
如何使用 Python 的 Kombu 检查 RabbitMQ 是否为空?
【问题讨论】: