Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про RabbitMQ: prefetch, qos

Какие параметры и настройки очередей позволяют управлять подтверждением сообщений и их повторной доставкой?

Вопрос проверяет знание практических рычагов RabbitMQ: как контролировать количество сообщений “в полете”, подтверждения, повторную доставку и маршрутизацию ошибок.

Короткий ответ

Подтверждение управляется выбором режима: авто-ack или ручной ack (basic_ack). Повторная доставка зависит от basic_nack/basic_reject и флага requeue, а также от падения канала (все unacked вернутся в очередь). Количество одновременно выданных сообщений регулируется basic_qos(prefetch_count=...). Для “плохих” сообщений используют DLX/DLQ, чтобы они уходили в отдельную очередь вместо бесконечных повторов. Для ретраев применяют TTL и dead-letter маршрутизацию или отложенную доставку через отдельные механизмы.

Длинный ответ

Управление подтверждением и повторной доставкой делится на настройки потребителя и параметры очереди/политики.

1) Настройки на стороне consumer (ключевые)

  1. Режим подтверждения

  • auto-ack: сообщение считается обработанным сразу при доставке (риск потерь при падении воркера)

  • manual ack: явный basic_ack после обработки

  1. nack/reject и requeue

  • basic_nack(..., requeue=True) вернет сообщение в очередь для повторной обработки

  • requeue=False обычно отправит сообщение в DLQ (если настроен DLX), иначе сообщение может быть отброшено (зависит от конфигурации)

  1. QoS / Prefetch

  • basic_qos(prefetch_count=N) ограничивает число unacked на канале/потребителе

channel.basic_qos(prefetch_count=50)
channel.basic_consume(queue="tasks", on_message_callback=on_message, auto_ack=False)

2) Настройки очереди и политики (queue arguments)

Здесь важна логика: очередь сама по себе не “включает ack”, но задает правила, куда идут сообщения при отказах и как долго живут.

  1. Dead Letter Exchange (DLX)

  • аргументы очереди: x-dead-letter-exchange, x-dead-letter-routing-key

  • используются, чтобы “отбитые”/просроченные сообщения уходили в DLQ

  1. TTL

  • x-message-ttl (время жизни сообщений в очереди)

  • x-expires (время жизни самой очереди)

  • вместе с DLX TTL часто используется для retry-очередей: сообщение “ждет” TTL, затем улетает обратно в основную очередь через DLX

  1. Ограничение длины очереди

  • x-max-length, x-max-length-bytes

  • при переполнении сообщения могут “выталкиваться” (обычно в DLX при правильной настройке), что влияет на гарантию “не потерять”

3) Как проектируют повторную доставку без бесконечного цикла

  1. Retry через отдельные очереди

  • main -> retry(с TTL) -> main

  • после N попыток отправлять в DLQ для ручного разбора

  1. Счетчик попыток

  • хранить счетчик в заголовках/метаданных или во внешнем хранилище

  • после превышения лимита: requeue=False и маршрутизация в DLQ

Вывод
На практике управление подтверждением и повторной доставкой строят вокруг manual ack, nack/requeue, prefetch, а для “плохих” сообщений добавляют DLX/DLQ и retry-схемы через TTL или отдельные очереди.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • RabbitMQ

    RabbitMQ

Ключевые слова

#prefetch

#qos

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.