Kombu + RabbitMQ:检查队列是否为空

建筑

考虑一个带有DB记录的系统。 每条记录可以处于live状态或expired状态; 应该使用外部软件模块定期处理live记录。

我已经用Kombu和RabbitMQ的经典生产者 - 消费者体系结构解决了这个问题。 生产者每隔几秒从DB获取记录,并由消费者处理它们。

在这里输入图像描述

问题

live活动的数量变化很大,在高峰时段,消费者无法处理负载,队列中有数千个物品被堵塞。

我想使系统具有适应性,以便生产者在队列为空时不会向消费者发送新事件。

我试过了什么

  • 搜索Kombu文档/ API
  • 检查队列对象
  • 使用RabbitMQ REST API: http://<host>:<port/api/queues/<vhost>/<queue_name> 。 它很有效,但它是另一种维护机制,我更喜欢Kombu内部的优雅解决方案。
  • 如何使用Python的Kombu检查RabbitMQ是否为空?


    你可以在kombu Queue对象上调用queue_declare()。

    根据文档,函数返回:

    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()
    
    链接地址: http://www.djcxy.com/p/46367.html

    上一篇: Kombu+RabbitMQ: Check whether a queue is empty

    下一篇: RabbitMQ Consumer Design for Multiple Exchange