SQS 批处理窗口持续时间和 ReceiveMessage 等待时间秒之间有什么区别?

Den*_*ed5 5 amazon-sqs amazon-web-services aws-lambda

您可以指定 SQS 作为 Lambda 函数的事件源,并可以选择定义批处理窗口持续时间

您还可以指定WaitTimeSeconds呼叫的ReceiveMessage

这两种设置之间的主要区别是什么?

有哪些用例?

Erm*_*ary 12

它们本质上是不同的。

\n
\n

接收消息等待时间设置决定您的应用程序将进行长轮询还是短轮询。您应该(几乎)始终选择长轮询,因为它有助于降低成本;具体方法在文档

\n

它可以通过两种不同的方式设置:

\n\n

它确定应用程序在返回空结果之前等待消息在队列中可用的时间。

\n
\n

另一方面,您可以通过将 SQS 队列添加为触发器来将其配置为 Lambda 函数的事件源。

\n

创建 SQS 触发器时,您有 2 个可选字段:

\n
    \n
  • 批量大小(每批中发送到函数的消息数)
  • \n
  • 批处理窗口(调用函数之前收集 SQS 消息的最长时间,以秒为单位)
  • \n
\n

批处理窗口函数设置MaximumBatchingWindowInSecondsSQS 事件源映射的属性。

\n

这是 Lambda 轮询器在调用函数之前等待从队列中收集消息的最长时间(以秒为单位)。批处理窗口只是确保在调用 Lambda 函数之前 SQS 队列中积累了更多消息。这提高了效率并降低了 Lambda 调用频率,帮助您降低成本。

\n

值得注意的是,它被定义为最大值因为它不能得到保证

\n

根据文档,只要满足以下任一条件,就可以调用您的 Lambda 函数:

\n
    \n
  • 已达到批量大小限制
  • \n
  • 批处理窗口已过期
  • \n
  • 批次达到 6 MB 的有效负载限制
  • \n
\n
\n

总而言之,这两个功能都用于控制等待的时间但产生的行为有所不同。

\n

在第一种情况下,您控制轮询器(您的应用程序)在检测到 SQS 队列中的消息并立即返回之前可以等待多长时间。您可以将此值设置为 10 秒,但如果 5 秒后在队列中检测到消息,则调用将返回。您可以更改每条消息的此值,或者在队列级别设置通用值。您可以利用带或不带 Lambda 函数的长(或短)轮询,因为它可以通过 AWS API、控制台、CLI 和任何官方 SDK 获得。

\n

在第二种情况下,您控制轮询器(内置 Lambda 轮询器)在实际调用 Lambda 处理消息之前可以等待的时间。您可以将此值设置为 10 秒,即使 5 秒后在队列中检测到消息,它可能仍然不会调用您的 Lambda。调用函数时的实际行为将根据批量大小和有效负载限制而有所不同。该值自然是在 Lambda 级别设置的,而不是针对每条消息设置的。此选项仅在使用 Lambda 函数时可用。

\n
\n

您可以\xe2\x80\x99t 将两者一起使用,因为长/短轮询适用于持续运行的应用程序或一次性调用。Lambda 函数轮询 SQS 的时间不能超过 15 分钟,而且是手动调用。

\n

对于 Lambda 函数,您将使用本机 SQS 事件源,对于任何其他服务/应用程序/用例,您将手动集成 SQS。

\n
\n

从某种意义上说,它们是相同的,都旨在帮助您最终降低成本,但在使用它们的地方方面却截然不同。

\n