当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数
Posted
技术标签:
【中文标题】当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数【英文标题】:Trigger Lambda Function in AWS when the message is present in SQS Queue 【发布时间】:2017-04-29 11:33:12 【问题描述】:我正在使用 AWS Lambda 函数来处理队列中的消息,它工作正常。但是当消息可用或添加到 SQS 队列中时,我需要执行此 Lambda 函数。
是否可以基于 SQS 队列触发 Lambda 函数。请建议一种方法来实现此目标。
【问题讨论】:
【参考方案1】:不直接支持从 SQS 队列调用 Lambda 函数。您可以在此处查看可用触发器的列表:http://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html
可能的解决方案:
-
将 SQS 队列替换为 Kinesis 或 DynamoDB。两者都可以在更新时触发 Lambda 函数。
在 SQS 之前注入 SNS。 SNS 可以向 SQS 添加项目和触发 Lambda 函数。
如果您不需要近乎实时的处理,这两个选项也是有效的:
-
创建将每 N 分钟(例如每分钟)触发 Lambda 函数的 CloudWatch 事件规则。
为您的 SQS 队列创建 CloudWatch 警报监视
ApproximateNumberOfMessagesVisible
参数。此警报应发布到 SNS 主题,然后触发 Lambda 函数。
【讨论】:
能否请您详细解释一下这个方法:“在SQS之前注入SNS。SNS可以向SQS添加项目并触发Lambda函数” 您可以通过 SNS API 发布到 SNS 主题。 SNS 会将消息扇出到多个端点。 我在这个 AWS 中不太好,因为我只是这里的初学者。你能帮我详细说明一下吗 请参阅docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html 了解更多信息。基本上,您更改了将消息推送到 SQS 队列的系统;它应该将消息发布到 SNS 主题,然后如果您将队列设置为订阅者,该主题将散布到您的 SQS 队列。 在SQS之前注入SNS时,如何保证消息加入SQS后触发lambda函数?【参考方案2】:Lambda 现在支持将 SQS 作为本机事件源
https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
【讨论】:
以上是关于当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud - SQS - 此wsdl版本的指定队列不存在