Поведение AWS SQS с несколькими установленными лямбда-триггерами
У меня установлена очередь SQS с несколькими лямбдами, настроенными как триггеры. Хотя это допускается API-интерфейсом AWS, неясно, каково предполагаемое поведение.
Например, одно сообщение извлекается из очереди и отправляется каждой лямбде? Или вместо этого каждая лямбда действует как служба опроса, которая извлекает сообщения из очереди отдельно?
Судя по моим испытаниям, кажется, что это последнее, но я нигде не могу найти это документированное где-либо. Последнее также не имеет большого смысла для меня, учитывая функциональность параллелизма AWS Lambda.
1 ответ
Сообщение SQS может быть прочитано только один раз из очереди, и пока оно обрабатывается одним потребителем, оно будет невидимым для других потребителей. Если у вас есть несколько лямбд, каждая получит свою долю сообщений, но одно сообщение не будет доставлено более чем одной лямбде за раз.
Сообщения SQS могут быть повторно вставлены в очередь в случае сбоя обработки лямбда (если лямбда запускается очередью) или если сообщение не удаляется в течение тайм-аута видимости (если лямбда опрашивает очередь).
Если вам нужно, чтобы одно и то же сообщение обрабатывалось несколькими лямбдами одновременно, вы можете:
- разветвляют сообщение SQS к SNS, у которого будет несколько подписчиков (например, несколько лямбд, все обрабатывают одно и то же сообщение), или
- используйте поток Kinesis вместо SQS. Kinesis поддерживает несколько потребителей одного и того же сообщения.
Надеюсь, это поможет:)