8

我想实现一个 Amazon SNS 主题,它首先将消息传递到作为主题订阅者的 SQS 队列,然后执行也是同一主题订阅者的 AWS Lambda 函数。然后,Lambda 函数可以从 SQS 队列中读取消息并并行处理其中的几个(数百个)。

我的问题是,是否有任何方法可以保证发送到 SNS 主题的消息首先被传递到 SQS 队列,然后才传递到 Lambda 函数?

这样做的目的是扩展到大量消息,而不必为每条消息单独执行 Lambda 函数。

4

3 回答 3

4

为此,如果从云监视警报中使用触发 lambda 可能会更好、更有效。将云监视警报设置为 SQS 上的缓冲区限制,这可能会触发 lambda 以启动和处理完整队列。

于 2015-11-06T06:42:35.467 回答
1

您正在寻找的内容目前无法使用SNS Topic. 如果您订阅Lambda了一个SNS Topic特定的消息,Lambda则每次SNS Topic收到消息时都会并行执行。

解决方案可能是拥有两个SNS Topics并将消息发布到第一个并让您SQS订阅它。成功向第一个主题提交消息后,您可以向第二个主题发送消息以SNS Topic执行您Lambda处理第一个SNS Topic存储到的消息SQS

另一种可能的解决方案可能是上述,您可以只向第二个主题发送一些定期消息以运行 subscribed Lambda。这将允许您扩展您的Lambda SQS Workers.

于 2015-07-23T17:35:17.040 回答
0

将 SQS 队列和 Lambda 函数都订阅到 SNS 主题是让 Lambda 函数以低延迟处理 SNS 消息的好方法。我刚刚测试了这个过程。每次尝试都会在插入 SQS 消息后调用 lambda 函数。我不希望这种情况总是如此,但它可以尽可能地解决延迟问题。不能保证,您需要 CloudWatch 计划事件来接收任何错过的消息。

于 2016-11-02T17:23:36.020 回答