Дедупликация
Очереди FIFO реализуют механизм дедупликации сообщений с помощью набора параметров, обеспечивающих доставку и обработку сообщений только один раз и в порядке их отправки.
Дедупликация по идентификатору
Сообщения, отправляемые в очереди FIFO, получают идентификатор для дедупликации отправляемых в очередь сообщений (MessageDeduplicationId
). Если сообщение с идентификатором принято, то все остальные сообщения с таким же идентификатором будут поступать в очередь, но не будут доставляться получателю в течение пятиминутного интервала дедупликации. Если идентификатор не указан, отправка сообщения в очередь FIFO не выполняется.
Каждое сообщение, отправляемое в очередь FIFO, должно иметь уникальный идентификатор дедупликации. Если сообщение будет доставлено, то другие сообщения с таким же идентификатором не будут доставляться.
Параметр MessageDeduplicationId
доступен получателю сообщения и может использоваться для устранения проблем с доставкой сообщений.
Если сообщение отправлено успешно, а ответ о приеме потерян, то Message Queue не распознает дубликат, если будет принято сообщение с тем же идентификатором после истечения интервала дедупликации.
Дедупликация по содержимому
В очередях может быть включена дедупликация по содержимому сообщения. Сообщения, отправленные в такую очередь без идентификатора дедупликации, будут получать его автоматически. Автоматически сгенерированный идентификатор представляет собой хэш-сумму тела сообщения, созданную по алгоритму SHA-256.
Работа механизма дедупликации зависит от настроек дедупликации очередей и сообщений:
- Если у отправленного сообщения нет идентификатора дедупликации и в очереди FIFO не включена дедупликация по содержимому, то отправителю вернется ответ с ошибкой.
- Если у отправленного сообщения есть идентификатора дедупликации и в очереди FIFO включена дедупликация по содержимому, то будет использовано значение идентификатора из сообщения.
Сообщения с одинаковым содержимым, поступающие в очередь с включенной дедупликацией по содержимому сообщения во время интервала дедупликации, считаются дубликатами: получателю доставляется только одна копия сообщения.
Если в очередь со включенной дедупликацией по содержимому отправить одно сообщение и следом другое с таким же содержимым, но с другим идентификатором дедупликации, оба сообщения будут считаться дубликатами и получателю будет доставлено только одно из них.
Повторные попытки получения сообщений
При получении сообщений из очередей FIFO используется идентификатор попытки получения сообщений — ReceiveRequestAttemptId
.
Если приложение потеряло связь с Message Queue, этот идентификатор можно использовать для повторного получения набора сообщений. Параметр можно использовать в течение 5 минут после вызова метода ReceiveMessage
. При запросе сообщений идентификатор можно указывать явно или использовать автоматически сгенерированные идентификаторы.
Повторное получение сообщений с тем же ReceiveRequestAttemptId
возможен, если состав и видимость сообщения не менялись. Во время таймаута видимости повторные запросы сообщений с одинаковыми ReceiveRequestAttemptId
будут возвращать одни и те же сообщения с одинаковым параметром ReceiptHandle
.