SQS lambda 触发器未按预期工作

问题描述 投票:0回答:1

场景是这样的:当我的进程启动时,我向 SQS 中的队列发送大约 3k 条消息。从那里我有一个 lambda,我想选择其中 500 条消息并处理它们,然后获取接下来的 500 条消息,依此类推,直到队列为空。由于处理消息的 lambda 必须与非常慢的 API 通信,因此我无法使用并发 lambda 执行,否则我将达到该 API 的限制。 我看到的问题是,有时 lambda 开始选择 500 条消息,但在下一次执行中选择的消息少于 200 条,而下一次执行时它选择的消息甚至更少,依此类推,而不是每次都选择 500 条消息。 也许我误解了设置中的某些内容。我怎样才能实现这种行为? 这些是我的设置:

Lambda:
ProcessMessages:
    Type: AWS::Serverless::Function
    Properties:
      Timeout: 600
      CodeUri: process_messages/
      Role: !Sub ${ConsumerLambdaRole.Arn}
      Handler: app.lambda_handler
      Runtime: python3.8
      ReservedConcurrentExecutions: 1
      Architectures:
        - x86_64
Queue:
  ProcessMessagesQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: 'processMessages'
      DelaySeconds: 0
      VisibilityTimeout: 900
      RedrivePolicy:
        deadLetterTargetArn: !GetAtt DLmessages.Arn
        maxReceiveCount: 10

EventSource:
  SendMessageToLambda:
    Type: AWS::Lambda::EventSourceMapping
    Properties:
      BatchSize: 500
      Enabled: true
      EventSourceArn: !GetAtt ProcessMessagesQueue.Arn
      FunctionName: !GetAtt ProcessMessages.Arn
      FunctionResponseTypes: 
        - "ReportBatchItemFailures"
      MaximumBatchingWindowInSeconds: 20
amazon-web-services aws-lambda amazon-sqs
1个回答
0
投票

是的,这就是 AWS Lambda 和 Amazon SQS 的行为。无法保证 Lambda 将从 SQS 队列接收最大数量的消息。

无法改变此行为。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.