#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