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

Я развернул функцию AWS Lambda, которая срабатывает, когда очередь SQS получает сообщение. Функция отправляет запрос в Rest API, и если ответ не в порядке, сообщение SQS необходимо обработать снова.

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

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

Любое понимание этого вопроса было бы очень полезно.

1 Ответ

2 голосов
/ 20 мая 2019

С Поведение AWS Lambda Retry - AWS Lambda :

Если вы настроите очередь Amazon SQS в качестве источника событий, AWS Lambda будет опрашивать пакет записей в очереди и вызывать вашу функцию Lambda. Если вызов завершится неудачно или истечет время ожидания , каждое сообщение в пакете будет возвращено в очередь , и каждое из них будет доступно для обработки после истечения периода ожидания видимости. (Тайм-ауты видимости - это период времени, в течение которого сервис Amazon Simple Queue Service запрещает другим пользователям получать и обрабатывать сообщение).

Как только вызов успешно обработает пакет , каждое сообщение в этом пакете будет удалено из очереди . Если сообщение не было успешно обработано , оно либо отбрасывается, либо, если вы настроили очередь недоставленных писем Amazon SQS, информация об ошибке будет направлена ​​туда для анализа.

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

...