AWS - размер партии SQS и лямбда-подход - PullRequest
0 голосов
/ 07 февраля 2019

Если я правильно понимаю, настройка размера пакета на Lambda решает, сколько сообщений нужно принять за один цикл из SQS.Поэтому этот JSON (взят из теста Lambda SQS);

{
  "Records": [
    {
      "messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
      "receiptHandle": "MessageReceiptHandle",
      "body": "FAIL",
      "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1523232000000",
        "SenderId": "123456789012",
        "ApproximateFirstReceiveTimestamp": "1523232000001"
      },
      "messageAttributes": {
      },
      "md5OfBody": "7b270e59b47ff90a553787216d55d91d",
      "eventSource": "aws:sqs",
      "eventSourceARN": "arn:aws:sqs:eu-west-1:123456789012:MyQueue",
      "awsRegion": "eu-west-1"
    }
  ]
}

Есть массив Records.И если я установлю размер пакета на 5, то, если в SQS будет 5 сообщений, они будут включены в массив.Если имеется 10 сообщений, то Lambda будет вызываться дважды, по 5 сообщений в каждой записи.

Теперь я немного запутался в том, какой подход выбрать.Моя лямбда довольно проста.Это будет POST-запрос Axios к внешнему сервису.Если произойдет ошибка, я выдам ошибку.Я мог бы даже использовать axios-retry и сделать повторные попытки довольно легкими.

Должен ли я использовать пакет в моем случае?Наивно смотрю, все что мне нужно это 1 к 1. Другими словами, сообщение приходит.Лямбда берет это.Если произойдет ошибка, она будет автоматически повторена чуть позже.

Наоборот, мне придется перебирать все сообщения и пытаться выполнить запрос Axios.Что, если третье из пяти сообщений терпит неудачу, в этом случае я выбрасываю ошибку, и лямбда останавливается.Что происходит с сообщениями четвертым и пятым?Они повторно отправляются в SQS, а затем снова подобраны для другого исполнения?

1 Ответ

0 голосов
/ 07 февраля 2019

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

Я не думаю, что вам требуется пакетная обработка в указанном выше случае.

Что если третий из пятисообщения терпят неудачу, в этом случае я выбрасываю ошибку, и лямбда останавливается.Что происходит с сообщениями четвертым и пятым?Пересылаются ли они в SQS, а затем снова выбираются для другого выполнения?

Сообщения не будут удалены из очереди, если ваши ошибки Lambda основаны на SQS тайм-аут видимости и политика перезапуска конфигурация.SQS снова запустит Lambda в соответствии с конфигурацией.Если вы настроили DLQ, то после достижения maxReceiveCount сообщения об ошибках будут добавлены в DLQ и удалены из основной очереди.

...