当前,我有一个AWS SQS作为我的AWS Lambda函数的触发器。

我想实施长时间轮询以降低成本,因为我已经用完了每月免费套餐的70%,大部分是来自空收据。

我尝试通过将队列属性ReceiveMessageWaitTimeSeconds更改为20 seconds来设置长轮询:

amazon-web-services - AWS SQS长轮询不会减少空接收-LMLPHP

但是,这似乎并没有减少空接收的数量,在2:00-3:00之间的11/19更改了设置。
amazon-web-services - AWS SQS长轮询不会减少空接收-LMLPHP

根据AWS DocumentationWaitTimeSeconds的优先级高于队列属性ReceiveMessageWaitTimeSeconds


当a的WaitTimeSeconds参数发生短轮询时
通过以下两种方式之一将ReceiveMessage请求设置为0:


ReceiveMessage调用将WaitTimeSeconds设置为0。
ReceiveMessage调用未设置WaitTimeSeconds,但是队列属性ReceiveMessageWaitTimeSeconds设置为0。


注意

对于ReceiveMessage操作的WaitTimeSeconds参数,一个
在1到20之间设置的值优先于为
队列属性ReceiveMessageWaitTimeSeconds。


由于AWS Lambda正在接收SQS请求,因此我认为无法配置WaitTimeSeconds

为什么我的长时间轮询配置在这种情况下不起作用?我是误解了什么,还是配置错误?

谢谢!

最佳答案

实际上,长轮询在您的情况下起作用。

5 lambdas * polling / 20 seconds * 3600 seconds in an hour = 900 receives/hour

我认为您错过的是“ 5个最小并发lambda”。 Lambda Scaling Behaviour文档中暗含了此信息,但announcement/deep-dive blog的“其他信息”部分中对此进行了更有效和明确的布局。


最初创建并启用SQS事件源映射时,或者
当消息在一段时间没有流量后首次出现时,
Lambda服务将开始使用五个并行轮询SQS队列
长轮询连接。 Lambda服务监控
机上消息,以及当它检测到该数字呈趋势时
最多,它将使轮询频率增加20 ReceiveMessage
每分钟请求数和功能并发性,每60次调用
分钟。

07-24 14:36