Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Группы

Очередь FIFO доставляет каждую группу сообщений по порядку: пока у группы есть сообщение в обработке, её следующее сообщение ждёт, а другие группы продолжают.

Очередь FIFO с тремя группами сообщений: группа с сообщением в обработке ждёт, две другие доставляютОчередь FIFO orders.fifoalice1в обработке2ждёт3ждётbob1выдано2в очереди3в очередиcarol1выдано2в очередиПотребитель: один ReceiveMessageполучает bob 1 и carol 1, alice ждётПовтор MessageDeduplicationId в течение пяти минутпринимается и не доставляется
Схема текстом
  1. Очередь FIFO orders.fifo: alice; 1 в обработке; 2 ждёт; 3 ждёт; bob; 1 выдано; 2 в очереди; 3 в очереди; carol; 1 выдано; 2 в очереди
  2. Очередь FIFO orders.fifo → Потребитель: один ReceiveMessage получает bob 1 и carol 1, alice ждёт: получение
  3. Повтор MessageDeduplicationId в течение пяти минут принимается и не доставляется

Каждая отправка в очередь FIFO называет MessageGroupId. Сообщения одной группы доставляются в том порядке, в каком их отправили. Пока сообщение группы в обработке, очередь не выдаёт других сообщений этой группы. Группа двигается дальше, когда это сообщение удалено или истёк его тайм-аут видимости. Разные группы друг друга не ждут, поэтому группа - единица параллельной работы.

Каждая отправка также указывает MessageDeduplicationId. Отправка, которая повторяет идентификатор в течение пяти минут, принимается и не доставляется. Очередь с дедупликацией по содержимому выводит идентификатор из хеша SHA-256 тела, а идентификатор, который называет отправка, имеет приоритет.

Группу публикации этот крейт берёт из самого точного места, которое её называет: из SqsPublishOptions вызова, затем из заголовка PARTITION_KEY_HEADER сообщения, затем из группы, которую зафиксировала политика, и наконец берёт default. Идентификатор дедупликации крейт отправляет всегда: тот, который называет вызов, или уникальный для процесса. Поэтому две отправки одного тела - это два сообщения, если сервис не назовёт для обеих один идентификатор. Группу или идентификатор дедупликации для стандартной очереди крейт отвергает с ошибкой SqsError::NotFifo. При доставке группа приходит в PARTITION_KEY_HEADER, и по ней выбираются конвейеры обработки.

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

Это поведение самого Amazon SQS (основные термины FIFO, идентификатор группы сообщений, идентификатор дедупликации).