设置多个 Lambda 触发器的 AWS SQS 行为

设置多个 Lambda 触发器的 AWS SQS 行为

我已经设置了一个 SQS 队列多种的Lambdas 配置为触发器。虽然 AWS 的 API 允许这样做,但目前尚不清楚什么预期的行为是。

例如,是否从队列中取出一条消息并发送给每个 Lambda?或者每个 Lambda 是否充当轮询服务,分别从队列中取出消息?

从我的测试来看,似乎是后者,但我无论如何也找不到任何相关记录。考虑到 AWS Lambda 的并发功能,后者对我来说也没有多大意义。

答案1

SQS 消息只能读一次从队列中取出,当一个消费者正在处理它时,其他消费者将看不到它。如果您有多个 lambda,则每个 lambda 都会获得它们所占的消息份额,但一条消息不会一次传递给多个 lambda。

SQS 消息可能重新插入如果处理 Lambda 失败(如果 Lambda 由队列触发)或者消息未在规定时间内被删除,则进入队列可见性超时(如果 Lambda 正在轮询队列)。

如果您需要多个 Lambda 同时处理一条消息,您可以:

  1. 扇出SQS 消息到 SNS它将拥有多个订阅者(例如多个 Lambda,都处理同一条消息),或者
  2. 使用运动流而不是 SQS。Kinesis 支持同一条消息的多个使用者。

希望有帮助:)

相关内容