首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在消息发布到SQS时延迟触发lambda?

如何在消息发布到SQS时延迟触发lambda?
EN

Stack Overflow用户
提问于 2019-04-03 08:33:42
回答 3查看 8.6K关注 0票数 6

我的lambda配置为在消息发布到SQS队列时触发。下面是用于部署的SAM模板。

代码语言:javascript
复制
  MyQueue:
    Type: AWS::SQS::Queue
    Properties:
        VisibilityTimeout: 180
        DelaySeconds: 90

  MyLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ../pathToCode
      Handler: index.handler
      Events:
        MySQSEvent:
          Type: SQS
          Properties:
              Queue: !GetAtt MyQueue.Arn

我使用的是DelaySeconds属性的AWS::SQS::QUEUE,这显然是行不通的。消息一旦发布到队列中,我的lambda就会被执行。我怎么才能拖延时间呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-03 09:08:52

编辑的

可以考虑三种方法来延迟从SQS到Lambda的消息传递:

  1. 为队列配置DelaySeconds,使新消息在特定时间内对消费者(如Lambda)不可见,最多可达15分钟
  2. 在Lambda事件源(触发器)中配置MaximumBatchingWindowInSeconds。Lambda可以在指定的持续时间内聚合消息(最多可达5分钟),或直到到达BatchSize为止(默认情况下,最多可聚合10,000条消息)。此选项配置消息的最大等待时间,而对于某些消息,仍然根本不存在等待(当达到最大窗口时间/大小时)。
  3. 使用Step函数状态机(带有Wait状态),如原始答案中所建议的那样。这提供了最大的灵活性,并且能够等待长达1年的

原始答案

最好的解决方案是使用AWS Step函数。

由SQS触发的lambda应该执行状态机,其中第一步是所需的睡眠量,第二步是lambda调用。

票数 11
EN

Stack Overflow用户

发布于 2021-04-18 16:55:14

在2021年,最好的答案是使用SQS的新的“批处理窗口”特性:

https://aws.amazon.com/about-aws/whats-new/2020/11/aws-lambda-now-supports-batch-windows-of-up-to-5-minutes-for-functions/

使用它,您可以允许SQS队列在调用Lambda函数之前收集最多5分钟的消息。

票数 4
EN

Stack Overflow用户

发布于 2019-04-03 09:15:26

延迟秒:每当您轮询队列时,它都会延迟接收消息调用。但是,每当您将消息推入队列中时,就会立即插入该消息。

如果您希望在某个时间间隔后执行lambda,请在开始执行之前放置一个睡眠(N),并在需要时增加lambda。到目前为止,还没有直接延迟触发器的方法,您的lambda将在消息进入队列后立即被触发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55490588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档