【发布时间】:2016-11-03 05:10:19
【问题描述】:
我想实现一个 Amazon SNS 主题,它首先将消息传递到作为该主题订阅者的 SQS 队列,然后执行一个也是同一主题订阅者的 AWS Lambda 函数。然后 Lambda 函数可以从 SQS 队列中读取消息并并行处理其中的几个(数百个)。
我的问题是,是否有任何方法可以保证发送到 SNS 主题的消息首先被传递到 SQS 队列,然后才传递到 Lambda 函数?
这样做的目的是扩展到大量消息,而不必为每条消息单独执行 Lambda 函数。
【问题讨论】:
-
没有得到你。 Lambda 函数是主题的订阅者,并且还轮询具有相同消息集的队列?另请记住,您不能转到 sqs 然后询问特定消息。那么你打算如何设计你的 lambda 函数来从队列中获取相同的消息呢?
-
在我的用例中,Lambda 函数将接收哪些消息并不重要。它将处理 SQS 队列中缓冲的任何消息。例如。如果在调用第一个 Lambda 函数调用之前已经排队了 100 条消息,那么它将处理所有这些消息。由于队列已经为空,其他 99 个函数调用将立即退出。我担心的是,如果我只发送一条 SNS 消息,则 Lambda 调用会在消息到达 SQS 之前发生,并且队列对于函数来说看起来是空的。
-
如果您只想在发送通知时运行 lambda 函数,那么为什么不将 lambda 函数订阅到 sns 本身。为什么要担心 sqs?
-
在没有 SQS 的情况下,我有两个担忧: - 如果 Lambda 函数失败,一些消息将未处理,所以我希望它们留在 SQS - 如果解决方案无法扩展,则一个 Lambda 函数调用一次只能处理一条消息(并行调用限制为 100 个)。
-
是的,您对
Lambda失败的假设是正确的。处理存储在SQS中订阅SNS Topic的消息要容易得多。
标签: amazon-web-services amazon-sqs amazon-sns aws-lambda