首页 > 解决方案 > 来自 RabbitMQ 的 message_count 不正确

问题描述

我有一些消耗大量资源的操作,所以我决定将它们排队。该功能运行良好,但我想在客户端某处显示消息数量。

它是在 内完成的GraphQL subscription,所以我每 10 秒获取一次当前状态。问题出在使用queue_declare()from之后Kombu

from kombu import Connection

def get_queue_message_count(channel, queue: str) -> int:
    _1, message_count, _2 = channel.queue_declare(
        queue=queue, passive=True, durable=True, auto_delete=False, arguments={"x-max-priority": 10}
    )
    print(f"{queue}: {message_count}")

    return message_count


async def generate_queue_status(_obj, _info) -> AsyncGenerator[Dict[str, Any], None]:
    with Connection(app_config.queue.broker) as connection:
        with connection.channel() as channel:
            while True:
                message_count = get_queue_message_count(channel, "actions")
                yield {"error": None, "messages": message_count}
                await asyncio.sleep(10)

我第一次得到正确的数字,其余的是 0,即使管理工具中的消息总数大于 0:

队列状态

标签: pythonrabbitmqkombu

解决方案


推荐阅读