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

nar*_*ibo 3 amazon-sqs amazon-web-services long-polling aws-lambda

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

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

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

SQS详细信息显示ReceiveMessageWaitTimeSeconds设置为20s

但是,这似乎并没有减少空接收的数量,在2:00-3:00之间的11/19更改了设置。 即使设置了长时间轮询,“空接收”图仍显示相同的趋势

根据AWS文档WaitTimeSeconds优先级高于队列属性ReceiveMessageWaitTimeSeconds

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

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

注意

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

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

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

谢谢!

tho*_*ace 5

其实长轮询工作在你的情况。

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

我认为您错过的是“ 5个最小并发lambda”。Lambda Scaling Behavior文档中暗含了这一点,但是在公告/深潜博客的“其他信息”部分中则更有效地且明确地列出了这一点。

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

  • 不幸的是不是,最少 15 次(每分钟 3 次;并行 5 次)。如果你保留并发性,你仍然会进行民意调查,你只会受到 lambda 的限制(最终会花费更多)。如果您的数据移动速度足够慢,以至于 SQS 的成本成为问题,您也许可以安全地使用 SNS,而 SNS 没有这种固定的“运行”成本。 (2认同)