首页 > 解决方案 > 为什么“reservedConcurrency”不限制并发飞行消息的数量?

问题描述

我试图限制并行运行的并发函数的数量。正如您在我的 serverless.yml 中看到的,我的 lambda 触发器是 SQS 队列中的一条消息:

  receiver:
    handler: src/receiver.handler
    timeout: 30
    events:
      - sqs:
          arn: ${queueArn}
          batchSize: 1   
    reservedConcurrency: 1

我使用“reservedConcurrency: 1”将并发执行次数限制为 1。我在 AWS UI 中验证了函数“receiver”配置,并且“reserve concurrency”也设置为 1。

不确定我缺少什么,因为我仍然看到从我的日志和 AWS SQS UI 运行的数百次执行。

标签: amazon-web-servicesconcurrencyamazon-sqsserverless

解决方案


SQS/Lambda 集成不适用于低于 5 的预留并发。

如果您在函数上配置保留并发,请设置至少 5 个并发执行,以减少 Lambda 调用您的函数时出现限制错误的机会。

https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

进行中的消息不仅是 Lambda 函数当前正在处理的消息。它还包括由于 Lambda 函数上可用的并发性不足而失败并返回队列的消息——它们在尝试的过程中将处于运行状态,即使大多数尝试都会失败。如果您将保留并发设置为 0,您应该会发现所有处理都停止了,但仍有一些消息在传输中,因为仍在尝试处理。


推荐阅读