【问题标题】:SQS triggers Lambda on Individual message delay deliverySQS 在单个消息延迟交付时触发 Lambda
【发布时间】:2019-03-10 20:27:25
【问题描述】:

我使用 CloudFormation 创建了以下资源

  • SQS(延迟交付:0)
  • 拉姆达
  • 角色
  • LambdaFunctionEventSourceMapping(SQS 触发 Lambda 函数)
  • 日志

资源创建成功。

当我使用延迟交付 30 秒向 SQS 发送消息时,SQS 会立即触发 Lambda。相反,它应该在 30 秒后触发。 仅供参考:我正在使用 AWS 控制台发送消息。

根据下面的链接,它应该将 SQS 延迟覆盖为单个消息延迟。 https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-timers.html

有没有其他方法可以做到这一点。

【问题讨论】:

  • 您使用什么来为 SQS 生成消息?为什么要延迟 lambda 执行而不是延迟交付?在这种情况下,您必须额外支付 30 秒的费用。
  • 消息由 PHP 应用程序生成并发送到 SQS。我不想延迟 Lambda 的执行。当我向 SQS 发送消息时,会触发一个 lambda。即使消息有延迟传递
  • 我刚刚通过使用 aws Web 界面意识到了这一点。同样的东西,立即触发 lambda fn

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


【解决方案1】:

这可能是 AWS 控制台的错误,因为当我通过 AWS 控制台将消息发送到 SQS 时,我遇到了类似的问题(即时调用 lambda)。但是,如果我通过 CLI 将消息发送到 SQS,我可以实现所需的行为:

aws sqs send-message --queue-url https://sqs.ap-southeast-1.amazonaws.com/{account}/{sqs} --message-body "msg 1 delay 60 secs" --delay-seconds 60

aws sqs send-message --queue-url https://sqs.ap-southeast-1.amazonaws.com/{account}/{sqs} --message-body "msg 2 delay 30 secs" --delay-seconds 30

这就是我在 lambda Cloudwatch 日志中看到的内容:

2019-02-19T02:26:36.189Z    510df77b-d1e5-5297-b0a0-a39eba727c61    msg 2 delay 30 secs
2019-02-19T02:26:36.189Z    510df77b-d1e5-5297-b0a0-a39eba727c61    sent 2019-02-19T02:26:06.124Z
2019-02-19T02:26:36.189Z    510df77b-d1e5-5297-b0a0-a39eba727c61    1st receive 2019-02-19T02:26:36.124Z

2019-02-19T02:26:57.729Z    fedcb590-2e14-596a-bc4b-e17545a46d91    msg 1 delay 60 secs
2019-02-19T02:26:57.729Z    fedcb590-2e14-596a-bc4b-e17545a46d91    sent 2019-02-19T02:25:57.667Z
2019-02-19T02:26:57.729Z    fedcb590-2e14-596a-bc4b-e17545a46d91    1st receive 2019-02-19T02:26:57.667Z

从日志中可以看出,消息传递被适当延迟,并且只有在收到消息后才会调用 lambda。

【讨论】:

    猜你喜欢
    • 2019-08-24
    • 2019-08-16
    • 2018-09-30
    • 2022-01-06
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多