【问题标题】:AWS Lambda to read from SQS queueAWS Lambda 从 SQS 队列中读取
【发布时间】:2018-09-24 18:36:47
【问题描述】:

我有一个从 SQS 队列中读取的 AWS Lambda 函数。 lambda 逻辑基本上是从 SQS 读取一条消息,然后处理并删除该消息。读取消息的代码类似于。

 ReceiveMessageRequest messageRequest =
        new ReceiveMessageRequest(queueUrl).withWaitTimeSeconds(5).withMaxNumberOfMessages(1);

现在我的问题是触发这个 lambda 的最佳方法是什么,以及这个 lambda 如何扩展例如,如果队列中有 1000 条消息,那么会有 1000 个 lambda 一起运行,因为在我的情况下是一个lambda 只能从队列中读取一条消息。

有关此类设计的最佳实践的任何指示。

【问题讨论】:

  • 为什么您要基于 SQS 消息触发 Lambda? SQS 用于缓冲信息,但 Lambda 可以实时运行。有什么方法可以更改源系统,使其触发 Lambda 或 SNS 而不是 SQS?

标签: amazon-web-services aws-lambda amazon-sqs serverless


【解决方案1】:

我们现在可以使用 SQS 消息来触发 AWS Lambda 函数。此外,不再需要运行消息轮询服务或创建 SQS 到 SNS 的映射。

更多详情:
https://aws.amazon.com/blogs/aws/aws-lambda-adds-amazon-simple-queue-service-to-supported-event-sources/
https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

【讨论】:

    【解决方案2】:
    【解决方案3】:

    可能有几种方法可以做到这一点,但当我尝试实现您在 Node.js 中描述的相同功能时,我发现 this guide 非常有用。此策略的一个缺点是您只能每 60 秒轮询一次队列。

    基本工作流程如下所示:

    • 设置一个 CloudWatch 警报,当队列有一定数量的消息时触发该警报。

    • Cloudwatch 警报随后会发布到 SNS

    • SNS 消息触发 Lambda scale() 函数

    • scale() 函数更新 DynamoDB 表中的配置记录,用于设置所需的工作进程数

    • 然后,您将拥有一个主 CloudWatch 计划,该计划每 60 秒调用一次 worker() 函数

    • worker() 函数从 DynamoDB 读取配置,以根据队列大小确定需要多少并发进程。

    • Worker() 然后调用适当数量的 process() 函数

    • Process() 函数使用来自 SQS 的消息,执行您的主应用程序逻辑,然后从队列中删除该项目。

    您可以在 Node.js here 中找到缩放函数的示例

    我在生产环境中使用此解决方案将近一年没有任何问题,即使队列中有数千条消息。如果你剪掉缩放部分,它一次只会做一条消息。

    【讨论】:

      【解决方案4】:

      现在您最好的选择可能是设置一个 AWS Cloudwatch 事件规则,在您需要的时间间隔内调用 lambda 函数。

      以下是来自 AWS 的示例应用程序:

      https://github.com/awslabs/aws-serverless-sqs-event-source

      我确实相信 AWS 最终会支持 SQS 作为 AWS lambda 的事件类型,这应该会让这更容易,但现在你最好的选择可能是我上面链接的代码的一个版本。

      【讨论】:

      • 以及如何扩展 lambda,我是否应该从队列中读取一条消息,它会触发 1000 个 lambdas 来同时处理它。
      • 还有一种方法可以让我们使用 SNS 来触发我的 lambda 来处理队列外的消息,
      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 2016-09-14
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2020-10-24
      相关资源
      最近更新 更多