Как лямбда-функция, использующая очередь SQS, может отправить сообщение в очередь недоставленных сообщений? - PullRequest
0 голосов
/ 28 января 2019

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

В найденной мной документации неясно, как заставить лямбду отправлять сообщениев очередь мертвых писем.Как это сделать?

Должен ли я использовать метод sendMessage (), как для вставки в стандартную очередь, или есть лучший подход?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

AWS автоматически отправляет сообщения в вашу очередь недоставленных сообщений (DLQ) , если receiveMessage возвращает это сообщение слишком много раз (настраивается в очереди со свойством maxReceiveCount) - обычно этопроисходит, если вы получаете сообщение, но не удаляете его (если, например, у вас было исключение при его обработке).Это самый простой способ использовать DLQ - позволить AWS размещать там сообщения для вас.

Однако, нет ничего плохого в том, чтобы вручную отправлять сообщение в DLQ .В этом нет ничего особенного - это просто очередная очередь - вы можете отправлять и получать сообщения из нее или даже назначать ей собственный DLQ!

Ручная отправка сообщений в DLQ полезна в нескольких сценариях, самым простым из которых являетсяВаш случай: когда вы знаете, что сообщение сломано (и хотите сэкономить время, пытаясь его обработать).Другой пример: если вам нужно быстро прожечь старые элементы в основной очереди, но при этом сохранить эти сообщения для последующей обработки, что позволит вам наверстать упущенное из-за невыполненной работы, сначала обработав более поздние события.

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

  1. Отправка сообщения в очередь FIRST
  2. Пометить сообщение как использованное в исходной очереди (используя deleteMessage), чтобы AWS автоматическимеханизмы не помещают это туда для вас позже.
    • если вы сначала удалите сообщение из исходной очереди, существует небольшая вероятность того, что сообщение будет потеряно (т. Е. Если вы потерпели крах или получили ошибку перед сохранением сообщения в другом месте)
0 голосов
/ 28 января 2019

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

Дело в том, что вы получаетесообщение, потерпите неудачу, не удаляйте его, и после maxReceiveCount раз он перенаправит его в DLQ.

Обратите внимание, что вы можете просто отправить его в DLQ (Подсказка документация см. там, где написано The NumberOfMessagesSent and NumberOfMessagesReceived for a Dead-Letter Queue Don't Match) однако это кажется злоупотреблением, по крайней мере для меня.

TLDR: Вы не должны отправлять его самостоятельно, очередь должна быть настроена сDLQ и Amazon сделают это за вас после определенного количества сбоев.

...