Как Amazon SQS заботится о том, чтобы не отправлять одно и то же сообщение разным экземплярам одного и того же сервиса? - PullRequest
1 голос
/ 01 апреля 2019

У меня есть очередь (в данном случае Amazon SQS), и работает N узлов одной и той же службы, которые принимают сообщения от SQS.

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

В случае Kafka мы знаем, что одному разделу темы можно назначить не более одного потребителя из одной группы потребителей.Как мы можем убедиться, что то же самое обрабатывается внутри Amazon SQS или нет?

1 Ответ

1 голос
/ 01 апреля 2019

Механизмом Amazon, предотвращающим доставку сообщения нескольким потребителям, является Тайм-аут видимости :

Сразу после получения сообщения оно остается в очереди. Чтобы предотвратить повторную обработку сообщения другими пользователями, Amazon SQS устанавливает тайм-аут видимости, то есть период, в течение которого Amazon SQS запрещает другим пользователям получать и обрабатывать сообщение. Тайм-аут по умолчанию для сообщения составляет 30 секунд. Минимум 0 секунд. Максимум 12 часов.

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

Но, как говорится в записке:

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

Если вам нужны абсолютные гарантии доставки только один раз, вы можете выбрать:

  1. Создайте свое приложение, чтобы оно было идемпотентным, чтобы результат то же самое, если обрабатывает одно и то же сообщение один или несколько раз.
  2. Try используя очередь SQS FIFO, которая обеспечивает ровно однократную обработку .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...