建筑学

考虑一个带有数据库记录的系统。每条记录都可以处于 liveexpired 状态; live 记录应使用外部软件模块定期处理。

我使用 Kombu 和 RabbitMQ 的经典生产者 - 消费者架构解决了这个问题。生产者每隔几秒钟从数据库中获取记录,消费者处理它们。

python - Kombu+RabbitMQ : Check whether a queue is empty-LMLPHP

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

我想让系统自适应,这样如果队列为空,生产者就不会向消费者发送新事件。

我试过什么

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

  • 如何使用 Python 的 Kombu 检查 RabbitMQ 是否为空?

    最佳答案

    您可以在 kombu 队列对象上调用 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()
    

    关于python - Kombu+RabbitMQ : Check whether a queue is empty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40463301/

    10-09 12:30