我已经设置了一个 SQS 队列多种的Lambdas 配置为触发器。虽然 AWS 的 API 允许这样做,但目前尚不清楚什么预期的行为是。
例如,是否从队列中取出一条消息并发送给每个 Lambda?或者每个 Lambda 是否充当轮询服务,分别从队列中取出消息?
从我的测试来看,似乎是后者,但我无论如何也找不到任何相关记录。考虑到 AWS Lambda 的并发功能,后者对我来说也没有多大意义。
答案1
SQS 消息只能读一次从队列中取出,当一个消费者正在处理它时,其他消费者将看不到它。如果您有多个 lambda,则每个 lambda 都会获得它们所占的消息份额,但一条消息不会一次传递给多个 lambda。
SQS 消息可能重新插入如果处理 Lambda 失败(如果 Lambda 由队列触发)或者消息未在规定时间内被删除,则进入队列可见性超时(如果 Lambda 正在轮询队列)。
如果您需要多个 Lambda 同时处理一条消息,您可以:
- 扇出SQS 消息到 SNS它将拥有多个订阅者(例如多个 Lambda,都处理同一条消息),或者
- 使用运动流而不是 SQS。Kinesis 支持同一条消息的多个使用者。
希望有帮助:)