首页 文章

仅在处理了相同主题的SQS订阅后才调用AWS Lambda SNS事件

提问于
浏览
8

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

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

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

3 回答

  • 4

    目前一个 SNS Topic 无法找到你想要的东西 . 如果您将 Lambda 订阅 SNS Topic ,那么每次 SNS Topic 并行收到消息时都会执行 Lambda .

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

    另一种可能的解决方案可能是上面的,您可以向第二个主题发送一些定期消息来运行订阅的 Lambda . 这将允许您缩放 Lambda SQS Workers .

  • 0

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

  • 1

    将SQS队列和Lambda函数订阅到SNS主题是让Lambda函数以低延迟处理SNS消息的好方法 . 我刚刚测试了这个过程 . 每次尝试都会在插入SQS消息后调用lambda函数 . 我不希望总是这样,但它确定了延迟问题,因为我愿意衡量 . 这不能保证,您需要一个CloudWatch预定活动来接收任何错过的消息 .

相关问题