【发布时间】:2021-07-08 14:04:24
【问题描述】:
一点背景,
我正在使用 Serverless 和 .Net 创建带有 SQS 触发器的 lambda。
事件触发器设置为批处理大小为 10k,等待时间(批处理窗口,即MaximumBatchingWindowInSeconds)为 30 秒。
队列的可见性超时设置为将近 16 分钟。
现在我已将 lambda 设置为仅 1 的保留并发并运行了一个测试,其中我将 100 个项目发送到队列并希望只看到一个包含这 100 个项目的 lambda 调用。
问题在于它将队列中的项目分开并调用 lambda 五次,导致创建五个包作为 lambda 功能的一部分,而不是我想要的一个包。 (仅供参考,lambda 的输出在消息的 s3 中创建包。我想要更少的大包。)
现在的问题:这是预期的行为吗?如果是这样,为什么当我将队列设置为最多可累积 10k 个项目时,它会变成 15 个。
根据aws docs,如果有效负载大于 256kb,则 lambda 可以获取比 batchSize 更少的消息,但我的消息非常小,100 条消息远不及 256kb。所以这不可能是原因。
也欢迎提出处理此问题的替代方案的建议,现在我正在考虑运行一个事件桥调度程序,该调度程序使用 SQS ReceiveMessage api 调用 lambda 并创建一个包,但我还必须确保正确删除之后排队。
我在这里有点无能为力,如果你们有任何想法,我将不胜感激。谢谢。
【问题讨论】:
-
什么是 sqs 触发器批量大小?
-
问题中说:10k
-
有这方面的消息吗?我也是这种情况
标签: amazon-web-services aws-lambda concurrency amazon-sqs