Что означает visibility timeout в AWS SQS?
- Почему сообщение SQS обработалось дважды?
Полученное сообщение SQS не удаляется, а становится невидимым на время visibility timeout. Если потребитель не удалил его за это время, оно снова видно и уйдёт другому — повтор.
- Таймаут должен быть больше времени обработки; для долгих задач — продлевать (ChangeMessageVisibility)
- Удаление (DeleteMessage) — подтверждение успешной обработки
- После maxReceiveCount — в DLQ по redrive policy
А ещё Отсюда at-least-once и обязательная идемпотентность
Подробно
Модель SQS: ReceiveMessage возвращает сообщение и делает его невидимым для других получателей на visibility timeout (по умолчанию 30 с, до 12 часов). Потребитель обрабатывает и вызывает DeleteMessage с receipt handle. Если не удалил — по истечении таймаута сообщение снова появляется в очереди и получит его кто-то другой (или тот же).
Почему так: брокер не знает, жив ли получатель; таймаут — способ автоматически повторить работу упавшего воркера.
Подводные камни:
- обработка дольше таймаута — сообщение обработают дважды параллельно. Ставить таймаут с запасом (в несколько раз больше p99 обработки) или продлевать для долгих задач
ChangeMessageVisibilityв процессе; - слишком большой таймаут — после сбоя воркера сообщение долго ждёт повторной попытки;
- DLQ — redrive policy с
maxReceiveCount: после N получений без удаления сообщение переносится в очередь недоставленных.
Standard-очередь вообще не гарантирует единственную доставку — дубли возможны и без таймаутов, поэтому обработка должна быть идемпотентной.
Что хотят услышать
- Механика невидимости и удаления.
- Как выбрать и продлевать таймаут.
- DLQ через redrive policy.
- At-least-once и идемпотентность.
Частые ошибки
- Таймаут меньше времени обработки — постоянные дубли.
- Удалять сообщение до обработки.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Время, после которого очередь удаляется
- ✗Срок хранения сообщения, после которого SQS удаляет его
- ✓Период, на который полученное сообщение скрыто от других consumers
- ✗Интервал между автоматическими коммитами offset
Что спросят дальше
- Как работает DLQ в SQS?
- Почему SQS даёт at-least-once?
Разбор темы
- RabbitMQ, SQS и классические очереди
Модель exchange/binding/queue, ack/nack и publisher confirms, prefetch, DLQ через DLX, отложенные сообщения, SQS Standard vs FIFO и visibility timeout.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.