首页 文章

Kombu RabbitMQ:检查队列是否为空

提问于
浏览
4

架构

考虑具有DB记录的系统 . 每条记录可以是 liveexpired 状态;应使用外部软件模块定期处理 live 记录 .

我使用Kombu和RabbitMQ的经典制作人 - 消费者架构解决了这个问题 . 生产环境 者每隔几秒从DB中提取记录,消费者处理它们 .

enter image description here

问题

live 事件的数量变化很大,在高峰时段,消费者无法处理负载,并且队列被数千个项目堵塞 .

我想使系统自适应,以便 生产环境 者在队列为空时不会向消费者发送新事件 .

我尝试了什么

  • 正在搜索Kombu文档/ API

  • 检查Queue对象

  • 使用RabbitMQ REST API: http://<host>:<port/api/queues/<vhost>/<queue_name> . 它有效,但它是另一种维护机制,我更喜欢Kombu内的优雅解决方案 .

How do I check whether a RabbitMQ is empty using Python's Kombu?

1 回答

  • 1

    您可以在kombu Queue对象上调用queue_declare() .

    根据docs函数返回:

    Returns a tuple containing 3 items:
            the name of the queue (essential for automatically-named queues)
            message count
            consumer count
    

    因此你可以这样做:

    name, msg_count, consumer_count = queue.queue_declare()
    

相关问题