当前,我有一个AWS SQS作为我的AWS Lambda函数的触发器。
我想实施长时间轮询以降低成本,因为我已经用完了每月免费套餐的70%,大部分是来自空收据。
我尝试通过将队列属性ReceiveMessageWaitTimeSeconds
更改为20 seconds
来设置长轮询:
但是,这似乎并没有减少空接收的数量,在2:00-3:00之间的11/19更改了设置。
根据AWS Documentation,WaitTimeSeconds
的优先级高于队列属性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次调用
分钟。