advanced

RabbitMQ prefetch

Настраивайте prefetch, чтобы bound unacknowledged work, balance fairness and throughput и avoid one worker hoarding slow messages.

Prefetch (`basic.qos`) ограничивает число неподтверждённых сообщений, которые канал отдаёт consumer. Низкий prefetch улучшает справедливость между конкурирующими worker; высокий повышает throughput при быстрых однородных обработчиках. Prefetch 1 типичен для долгих задач, чтобы один worker не накапливал медленные job.

Prefetch действует на канал, а не на соединение с несколькими consumer. Сочетайте prefetch с алертами по глубине очереди и autoscaling consumer. Без лимита один медленный consumer может держать много unacked сообщений и голодать соседей.

На интервью: объясните, почему prefetch 1 помогает честному распределению, когда его повышать и как unacked сообщения влияют на память брокера.

Типовые ошибки: высокий prefetch при медленных handler, блокирующих очередь; забытый prefetch у autoscale consumer; настройка без измерения разброса latency обработки.

Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.

Чеклист:

  • Выберите prefetch по разбросу длительности handler.
  • Мониторьте unacked на consumer.
  • Согласуйте prefetch с сигналами autoscaling.
  • Перенастраивайте при смене профиля нагрузки.