Поведение AWS SQS с несколькими установленными лямбда-триггерами

У меня установлена ​​очередь SQS с несколькими лямбдами, настроенными как триггеры. Хотя это допускается API-интерфейсом AWS, неясно, каково предполагаемое поведение.

Например, одно сообщение извлекается из очереди и отправляется каждой лямбде? Или вместо этого каждая лямбда действует как служба опроса, которая извлекает сообщения из очереди отдельно?

Судя по моим испытаниям, кажется, что это последнее, но я нигде не могу найти это документированное где-либо. Последнее также не имеет большого смысла для меня, учитывая функциональность параллелизма AWS Lambda.

1 ответ

Решение

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

Сообщения SQS могут быть повторно вставлены в очередь в случае сбоя обработки лямбда (если лямбда запускается очередью) или если сообщение не удаляется в течение тайм-аута видимости (если лямбда опрашивает очередь).

Если вам нужно, чтобы одно и то же сообщение обрабатывалось несколькими лямбдами одновременно, вы можете:

  1. разветвляют сообщение SQS к SNS, у которого будет несколько подписчиков (например, несколько лямбд, все обрабатывают одно и то же сообщение), или
  2. используйте поток Kinesis вместо SQS. Kinesis поддерживает несколько потребителей одного и того же сообщения.

Надеюсь, это поможет:)

Другие вопросы по тегам