我不确定是否正确理解AWS Lambda - SQS触发器。我可以将其配置为这样一种方式:一个SQS队列可以根据消息体或消息属性触发不同的lambda函数吗?
My用例:我有三个不同的lambda函数(processCricket、processFootball、processTennis),每个函数都执行一个唯一的函数。我只有一个队列(processGame)来接收消息。队列中的每条消息都有一个属性"type“,即"Cricket”、“足球”或“网球”。我可以根据消息上的“类型”调用不同的lambda函数吗?
选项1:配置SQS以根据类型触发不同的lambda函数(不确定是否可以这样做)
选项2:配置一个lambda函数,它可以检查类型,然后根据其类型调用其他lambda函数。
选项3:为每个lambda创建单独的队列。通过将消息添加到适当的队列来控制哪个lambda处理消息。
发布于 2020-06-12 17:12:00
选项1:配置SQS以根据类型触发不同的lambda函数
在type被lambda消耗之前,您不可能知道它的情况。所以这次是不可能的。
选项2:配置一个lambda函数,它可以检查类型,然后根据其类型调用其他lambda函数
是的,这是第一个选择的“可能”方式。但它可能会花费“更多”取决于你的使用。当您在批处理模式下使用sqs时,您必须通过进行多个检查来调用多个lambda。
选项3:为每个lambda创建单独的队列。通过将消息添加到适当的队列来控制哪个lambda处理消息。
在我看来,这可能是最好的选择。您可以为每个队列配置不同的DLQ,根据业务规则设置不同的批处理大小,不需要额外的lambda来增加“复杂性”。
发布于 2020-06-12 17:19:09
您应该而不是将多个Lambda函数配置为单个SQS队列的触发器。这是因为SQS中的消息将传递给任何一个使用者,当该消息由该使用者处理时,它将不会对其他人可见。因此,您将无法决定哪种“类型”的消息属于哪个函数,因此选项1是无效的。
备选案文2和3都应正常工作。如果您不期望将许多消息传递到您的队列中,因此不必担心Lambda标度,我将选择选项2。还要注意,可以在一个批处理中将多条消息传递给Lambda触发器,因此您必须相应地实现您的逻辑。
如果您期望收到大量的消息,那么选项3将更适合。
发布于 2021-05-07 19:00:06
这里的最佳选择是根本不直接将消息发送到队列。您可以使用SNS或EventBridge作为消息的目的地。然后,您应该为每种类型的消息都有一个队列。然后,您可以将每个队列订阅到源(SNS或EventBridge),并且只接收对该队列有意义的消息。使用EventBridge,您可以对整个有效负载进行相当数量的筛选。对于SNS,您需要将类型添加到属性中,以便它可以用于筛选。

https://stackoverflow.com/questions/62349013
复制相似问题