AWS автоматически отправляет сообщения в вашу очередь недоставленных сообщений (DLQ) , если receiveMessage
возвращает это сообщение слишком много раз (настраивается в очереди со свойством maxReceiveCount
) - обычно этопроисходит, если вы получаете сообщение, но не удаляете его (если, например, у вас было исключение при его обработке).Это самый простой способ использовать DLQ - позволить AWS размещать там сообщения для вас.
Однако, нет ничего плохого в том, чтобы вручную отправлять сообщение в DLQ .В этом нет ничего особенного - это просто очередная очередь - вы можете отправлять и получать сообщения из нее или даже назначать ей собственный DLQ!
Ручная отправка сообщений в DLQ полезна в нескольких сценариях, самым простым из которых являетсяВаш случай: когда вы знаете, что сообщение сломано (и хотите сэкономить время, пытаясь его обработать).Другой пример: если вам нужно быстро прожечь старые элементы в основной очереди, но при этом сохранить эти сообщения для последующей обработки, что позволит вам наверстать упущенное из-за невыполненной работы, сначала обработав более поздние события.
Ключевые моменты, которые следует запомнитьпри ручной отправке сообщения в DLQ:
- Отправка сообщения в очередь FIRST
- Пометить сообщение как использованное в исходной очереди (используя
deleteMessage
), чтобы AWS автоматическимеханизмы не помещают это туда для вас позже. - если вы сначала удалите сообщение из исходной очереди, существует небольшая вероятность того, что сообщение будет потеряно (т. Е. Если вы потерпели крах или получили ошибку перед сохранением сообщения в другом месте)