当前,我有一个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
。
在这种情况下,为什么我的长轮询配置不起作用?我是误解了什么,还是配置错误?
谢谢!
答案 0 :(得分:3)
实际上,长轮询 可以满足您的情况。
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次调用 分钟。