Насколько глубоко настраивали очереди RabbitMQ и Celery
Что проверяют
Эксплуатировали ли вы очередь в бою или знакомы с ней на уровне запуска задачи. Проверяют понимание трёх вещей: что происходит с сообщением при падении обработчика, откуда берутся дубли и как очередь ведёт себя при заторе.
Как отвечать
Разделите ответ на брокер и обработчик.
RabbitMQ: очередь объявляется как durable, а сообщения публикуются как persistent, одного без другого недостаточно, при рестарте брокера пропадёт либо очередь, либо её содержимое. Тип обмена выбирается по задаче: direct для точечной маршрутизации, topic для подписки по шаблону ключа, fanout для широковещания. Подтверждение ручное и после обработки, а не после получения. Ограничение выборки через basic.qos не даёт одному потребителю набрать весь поток. Для сообщений, которые не удаётся обработать, настраивается отдельная очередь через dead letter exchange, иначе они крутятся по кругу.
Celery: acks_late вместе с идемпотентной задачей, чтобы падение воркера не теряло работу; worker_prefetch_multiplier для долгих задач ставят в единицу; разные очереди под тяжёлое и лёгкое, воркеры запускаются с явным набором очередей; повторы через autoretry_for и нарастающую паузу; жёсткий и мягкий лимиты времени задачи; периодические задачи через beat, запущенный ровно в одном экземпляре. Отдельно: в задачу передаются идентификаторы, а не объекты и не сессии.
Где спотыкаются
Называют exclusive настройкой надёжности. Всё наоборот: такая очередь принадлежит одному соединению и исчезает вместе с ним, годится для временных ответов, а не для гарантий. Надёжность дают долговечность очереди, persistent-сообщения и подтверждение после обработки.
Второе: включают позднее подтверждение и не делают задачу идемпотентной. Воркер падает в середине, сообщение возвращается в очередь, письмо уходит второй раз, платёж создаётся дважды.
Третье: оставляют выборку по умолчанию на долгих задачах. Один воркер забирает пачку сообщений себе, обрабатывает их по очереди часами, остальные простаивают, а со стороны это выглядит как нехватка мощности.