[Документация Yandex Cloud](../../index.md) > [Yandex Message Queue](../index.md) > [Концепции](index.md) > Дедупликация

# Дедупликация

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

## Дедупликация по идентификатору {#deduplication-id}

Сообщения, отправляемые в очереди FIFO, получают идентификатор для дедупликации отправляемых в очередь сообщений (`MessageDeduplicationId`). Если сообщение с идентификатором принято, то все остальные сообщения с таким же идентификатором будут поступать в очередь, но не будут доставляться получателю в течение пятиминутного интервала дедупликации. Если идентификатор не указан, отправка сообщения в очередь FIFO не выполняется. 

Каждое сообщение, отправляемое в очередь FIFO, должно иметь уникальный идентификатор дедупликации. Если сообщение будет доставлено, то другие сообщения с таким же идентификатором не будут доставляться. 

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

Если сообщение отправлено успешно, а ответ о приеме потерян, то Message Queue не распознает дубликат, если будет принято сообщение с тем же идентификатором после истечения интервала дедупликации.

## Дедупликация по содержимому {#content-based-deduplication}

В очередях может быть включена дедупликация по содержимому сообщения. Сообщения, отправленные в такую очередь без идентификатора дедупликации, будут получать его автоматически. Автоматически сгенерированный идентификатор представляет собой хэш-сумму тела сообщения, созданную по алгоритму SHA-256. 

Работа механизма дедупликации зависит от настроек дедупликации очередей и сообщений:

1. Если у отправленного сообщения нет идентификатора дедупликации и в очереди FIFO не включена дедупликация по содержимому, то отправителю вернется ответ с ошибкой. 
1. Если у отправленного сообщения есть идентификатора дедупликации и в очереди FIFO включена дедупликация по содержимому, то будет использовано значение идентификатора из сообщения. 

Сообщения с одинаковым содержимым, поступающие в очередь с включенной дедупликацией по содержимому сообщения во время интервала дедупликации, считаются дубликатами: получателю доставляется только одна копия сообщения.

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

## Повторные попытки получения сообщений {#request-attempts}

При получении сообщений из очередей FIFO используется идентификатор попытки получения сообщений — `ReceiveRequestAttemptId`. 

Если приложение потеряло связь с Message Queue, этот идентификатор можно использовать для повторного получения набора сообщений. Параметр можно использовать в течение 5 минут после вызова метода `ReceiveMessage`. При запросе сообщений идентификатор можно указывать явно или использовать автоматически сгенерированные идентификаторы.

Повторное получение сообщений с тем же `ReceiveRequestAttemptId` возможен, если состав и видимость сообщения не менялись. Во время таймаута видимости повторные запросы сообщений с одинаковыми `ReceiveRequestAttemptId` будут возвращать одни и те же сообщения с одинаковым параметром `ReceiptHandle`.