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

Mat*_*ant 4 queue amazon-web-services amazon-lambda

我设置了一个 SQS 队列,其中包含多个配置为触发器的 Lambda。虽然 AWS 的 API 允许这样做,但尚不清楚预期的行为是什么

例如,是否将一条消息从队列中拉出并发送到每个 Lambda?还是每个 Lambda 都充当轮询服务,分别从队列中提取消息?

从我的测试来看,它似乎是后者,但我一生都无法在任何地方找到这种记录。考虑到 AWS Lambda 的并发功能,后者对我来说也没有多大意义。

MLu*_*MLu 6

SQS 消息只能从队列中读取一次,并且当它被一个消费者处理时,其他消费者将不可见。如果您有多个 lambda,每个 lambda 都会获得它们的消息份额,但一条消息不会一次传递给多个 lambda。

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

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

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

希望有帮助:)