我想实现一个 Amazon SNS 主题,它首先将消息传递到作为主题订阅者的 SQS 队列,然后执行也是同一主题订阅者的 AWS Lambda 函数。然后,Lambda 函数可以从 SQS 队列中读取消息并并行处理其中的几个(数百个)。
我的问题是,是否有任何方法可以保证发送到 SNS 主题的消息首先被传递到 SQS 队列,然后才传递到 Lambda 函数?
这样做的目的是扩展到大量消息,而不必为每条消息单独执行 Lambda 函数。
我想实现一个 Amazon SNS 主题,它首先将消息传递到作为主题订阅者的 SQS 队列,然后执行也是同一主题订阅者的 AWS Lambda 函数。然后,Lambda 函数可以从 SQS 队列中读取消息并并行处理其中的几个(数百个)。
我的问题是,是否有任何方法可以保证发送到 SNS 主题的消息首先被传递到 SQS 队列,然后才传递到 Lambda 函数?
这样做的目的是扩展到大量消息,而不必为每条消息单独执行 Lambda 函数。
为此,如果从云监视警报中使用触发 lambda 可能会更好、更有效。将云监视警报设置为 SQS 上的缓冲区限制,这可能会触发 lambda 以启动和处理完整队列。
您正在寻找的内容目前无法使用SNS Topic
. 如果您订阅Lambda
了一个SNS Topic
特定的消息,Lambda
则每次SNS Topic
收到消息时都会并行执行。
解决方案可能是拥有两个SNS Topics
并将消息发布到第一个并让您SQS
订阅它。成功向第一个主题提交消息后,您可以向第二个主题发送消息以SNS Topic
执行您Lambda
处理第一个SNS Topic
存储到的消息SQS
。
另一种可能的解决方案可能是上述,您可以只向第二个主题发送一些定期消息以运行 subscribed Lambda
。这将允许您扩展您的Lambda SQS Workers
.
将 SQS 队列和 Lambda 函数都订阅到 SNS 主题是让 Lambda 函数以低延迟处理 SNS 消息的好方法。我刚刚测试了这个过程。每次尝试都会在插入 SQS 消息后调用 lambda 函数。我不希望这种情况总是如此,但它可以尽可能地解决延迟问题。不能保证,您需要 CloudWatch 计划事件来接收任何错过的消息。