Неверный номер сообщения из RabbitMQ

#python #rabbitmq #kombu

Вопрос:

У меня есть некоторые действия, которые потребляют много ресурсов, поэтому я решил поставить их в очередь. Функциональность работает нормально, но я хотел показать количество сообщений где-нибудь на клиенте.

Это делается внутри 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)
 

В 1 — й раз я получаю правильный номер, в остальных случаях он равен 0, хотя общее количество сообщений в инструменте управления больше 0:

Состояние очереди

Комментарии:

1. я думаю, что если сообщения в очереди обрабатываются быстро, то они не отображаются в графе. Я наблюдал то же самое в своей визуализации кибаны. Можете ли вы остановить своего потребителя в очереди и проверить. Просто одна мысль

2. Я сделаю некоторую дополнительную отладку, но странно, что инструмент управления показывает 8, и он уменьшается один за другим примерно за 2 минуты, но мой код тем временем возвращает 0