AWS SQS长轮询不会减少空接收

时间:2018-11-19 09:55:22

标签: amazon-web-services aws-lambda amazon-sqs long-polling

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

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

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

SQS Details showing ReceiveMessageWaitTimeSeconds set to 20s

但是,这似乎并没有减少空接收的数量,在2:00-3:00之间的11/19更改了设置。 Empty Receives graph shows the same trend even after setting long polling

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

  

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

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

注意

     

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

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

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

谢谢!

1 个答案:

答案 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次调用   分钟。