从一个 SQS 触发器触发多个 lambda 函数

Sas*_*shi 5 amazon-sqs amazon-web-services aws-lambda

我不确定我是否理解 AWS Lambda - SQS 正确触发。我是否可以将它配置为一个 SQS 队列可以根据消息正文或消息属性触发不同的 lambda 函数?

我的用例:我有三个不同的 lambda 函数(processCricket、processFootball、processTennis),每个函数执行一个独特的功能。我有一个接收消息的队列(processGame)。队列中的每条消息都有一个属性“type”,它可以是“Cricket”、“Football”或“Tennis”。我可以根据消息上的“类型”调用不同的 lambda 函数吗?

选项 1:根据类型配置 SQS 以触发不同的 lambda 函数(不确定我是否可以这样做)

选项 2:配置一个可以检查类型的 lambda 函数,然后根据其类型调用其他 lambda 函数

选项 3:为每个 lambda 创建单独的队列。通过将消息添加到适当的队列来控制哪个 lambda 处理消息。

Jas*_*rth 8

这里最好的选择是根本不将消息直接发送到队列。您可以使用 SNS 或 EventBridge 作为消息的目标。那么每种类型的消息都应该有一个队列。然后,您可以将每个队列订阅到源(SNS 或 EventBridge),并且仅接收对该队列有意义的消息。使用 EventBridge,您可以对整个有效负载进行大量过滤。对于 SNS,您需要将类型添加到属性中,以便将其用于过滤。

在此输入图像描述


Ers*_*soy 5

选项 1:根据类型配置 SQS 以触发不同的 lambda 函数

type直到它被 lambda 消耗,你才能知道。所以这个是不可能的。

选项 2:配置一个可以检查类型的 lambda 函数,然后根据其类型调用其他 lambda 函数

是的,这是第一选择的“可能”方式。但根据您的使用情况,它可能会花费“更多”。当您以批处理模式使用 sqs 时,您必须通过多次检查来调用多个 lambda。

选项 3:为每个 lambda 创建单独的队列。通过将消息添加到适当的队列来控制哪个 lambda 处理消息。

在我看来,这可能是最好的选择。您可以为每个队列配置不同的 DLQ,根据您的业务规则设置不同的批次大小,不需要额外的 lambda 来增加“复杂性”。


Par*_*igm 5

你应该配置多个lambda函数作为触发单个SQS队列。这是因为 SQS 中的消息将传递给任何一个消费者,而该消息正在由该消费者处理时,其他人将看不到它。因此,您将无法决定哪种“类型”的消息传递给哪个函数,因此选项 1无效。

选项 2 和 3 都应该可以正常工作。如果您不希望将很多消息传送到您的队列,我会选择选项 2,因此不必担心Lambda 扩展。另请注意,可以将多条消息一次性发送到 Lambda 触发器,因此您必须相应地实现您的逻辑。

如果您期望收到大量消息,则选项 3会更合适。