2015-05-12 3 views
4

Простой вопрос: Я хочу запустить группу автомасштабирования на Amazon, которая запускает несколько экземпляров, обрабатывающих сообщения из очереди SQS. Но откуда я знаю, что экземпляры не обрабатывают одни и те же сообщения?AWS: множественные экземпляры чтения SQS

Я могу удалить сообщение из очереди при его обработке. Но если он еще не удален и все еще обрабатывается экземпляром, другой экземпляр МОЖЕТ скачать это же сообщение и обработать его, на мой взгляд.

ответ

10

Помимо довольно удаленной возможности SQS некорректно передавать одно и то же сообщение более чем один раз (что вам все еще нужно учитывать, хотя это маловероятно), я подозреваю, что ваш вопрос связан с отсутствием знакомства с концепцией SQS «Тайм-аут видимости».

Сразу после получения сообщения сообщение остается в очереди. Однако вы не хотите, чтобы другие компоненты в системе получали и обрабатывали сообщение снова. Таким образом, Amazon SQS блокирует их с тайм-аутом видимости, который является периодом времени, в течение которого Amazon SQS предотвращает прием и обработку этого сообщения другими компонентами-потребителями.

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

Это то, что держит несколько бегунов очереди видеть то же самое сообщение. По истечении таймаута видимости сообщение будет доставлено снова потребителю очереди, если вы не удалите его, или оно не превысит максимально настроенное количество поставок (после чего оно удаляется или переходит в отдельную очередь мертвой буквы, если вы настроили один). Если задание займет больше времени, чем установленный тайм-аут видимости, ваш потребитель также может отправить запрос в SQS, чтобы изменить тайм-аут видимости для этого отдельного сообщения.


Update:

Поскольку этот ответ был изначально написано, SQS ввел FIFO очереди в некоторых регионах AWS. Они работают с той же логикой, описанной выше, но с гарантированной доставкой в ​​порядке и дополнительными гарантиями, гарантирующими, что случайная дублированная доставка сообщений не может произойти.

Очереди FIFO (First-In-First-Out) предназначены для улучшения обмена сообщениями между приложениями, когда порядок операций и событий является критическим или дублирование не допускается. Очереди FIFO также обеспечивают ровно одну обработку, но ограничены 300 транзакциями в секунду (TPS).

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html

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

+0

Очистить ответ! Спасибо! Поэтому, когда я загружаю и обрабатываю одно сообщение за раз, не должно быть никаких проблем :) Else я могу изменить таймаут видимости ... Полезно знать, спасибо –

2

Вы можете получать повторяющиеся сообщения, но только "on rare occasions". И поэтому вы должны стремиться к идемпотентности.

Смежные вопросы