下面有一个用例
- StepFunction→λ→事件桥到SQS触发lambda
当消息接收到Eventbridge时,它将发布到SQS, SQS将触发lambda。我在这里注意到的是,每次推送消息时,它几乎需要21秒才能到达最终的lambda。
SQS配置:
- 可见性超时:30秒
- 死信队列:Enabled
- 延迟发送:0
- receiveMessageDelay: Tried both Short and long poll
Lambda位于VPC内部
当我做我的分析时,所有的桥都在瞬间发生,但SQS触发Lambda需要21秒。
我提到的所有博客都说,这将在瞬间发生,但对我来说没有运气。
我不确定我的配置是否错误。任何帮助对我来说都是更有价值的。
谢谢,皈依
扩展Guna自己的答案,我们遇到了同样的问题,并发现原因是文档SQS限制,因为我们的batchSize
配置为100,maximumBatchingWindow
配置为1。
AWS状态:
如果您使用的是批处理窗口,而您的SQS队列包含的流量非常低,Lambda在调用函数之前可能会等待长达20秒的时间。即使您将批处理窗口设置为低于20秒,也是如此。
来源:https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
删除batchSize
和maximumBatchingWindow
配置设置后,SQS-Lambda调用延迟显著降低。
经过进一步调查,我注意到在serverless中SQS触发器lambda设置配置为maximumBatchingWindow,以指定在调用该函数之前收集记录的最大时间(以秒为单位)。当批量大小为1时,不需要。