Получить доступ

Что означает visibility timeout в AWS SQS?

MiddleRabbitMQ и SQSRabbitMQAmazon SQS
Ещё спрашивают так:
  • Почему сообщение SQS обработалось дважды?
Коротко

Полученное сообщение SQS не удаляется, а становится невидимым на время visibility timeout. Если потребитель не удалил его за это время, оно снова видно и уйдёт другому — повтор.

  • Таймаут должен быть больше времени обработки; для долгих задач — продлевать (ChangeMessageVisibility)
  • Удаление (DeleteMessage) — подтверждение успешной обработки
  • После maxReceiveCount — в DLQ по redrive policy

А ещё Отсюда at-least-once и обязательная идемпотентность

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Модель SQS: ReceiveMessage возвращает сообщение и делает его невидимым для других получателей на visibility timeout (по умолчанию 30 с, до 12 часов). Потребитель обрабатывает и вызывает DeleteMessage с receipt handle. Если не удалил — по истечении таймаута сообщение снова появляется в очереди и получит его кто-то другой (или тот же).

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

Подводные камни:

  • обработка дольше таймаута — сообщение обработают дважды параллельно. Ставить таймаут с запасом (в несколько раз больше p99 обработки) или продлевать для долгих задач ChangeMessageVisibility в процессе;
  • слишком большой таймаут — после сбоя воркера сообщение долго ждёт повторной попытки;
  • DLQ — redrive policy с maxReceiveCount: после N получений без удаления сообщение переносится в очередь недоставленных.

Standard-очередь вообще не гарантирует единственную доставку — дубли возможны и без таймаутов, поэтому обработка должна быть идемпотентной.

Что хотят услышать

  • Механика невидимости и удаления.
  • Как выбрать и продлевать таймаут.
  • DLQ через redrive policy.
  • At-least-once и идемпотентность.

Частые ошибки

  • Таймаут меньше времени обработки — постоянные дубли.
  • Удалять сообщение до обработки.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Время, после которого очередь удаляется
  • ✓Период, на который полученное сообщение скрыто от других consumers
  • ✗Максимальный срок хранения логов producer-а
  • ✗Интервал между автоматическими коммитами offset

Что спросят дальше

  • Как работает DLQ в SQS?
  • Почему SQS даёт at-least-once?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем