【问题标题】:SQS Lambda Trigger polling rateSQS Lambda 触发器轮询率
【发布时间】:2021-11-28 17:17:09
【问题描述】:

我正在尝试了解 SQS Lambda 触发器在轮询来自队列的消息时的工作原理。

标准

我正在尝试确保在 1 秒内处理的消息不超过 3 条。

想法

我的想法是将触发器 BatchSize 设置为 3 并将队列的 ReceiveMessageWaitTimeSeconds 设置为 1 秒。我这样想对吗?

编辑:

我做了一些挖掘,看起来我可以在我的 Lambda 上设置并发限制。如果我将我的 Lambda 并发限制设置为一个,以确保一次只处理一批消息。如果我的 lambda 运行了一秒钟,那么下一批消息至少会在一秒钟后得到处理。这里的问题是长轮询会根据消息量自动调整队列上异步轮询的数量。这意味着,当大量消息进入时,lambdas 可能会限制。当 lambdas 限制时,消息会返回队列,直到最终进入 DLQ。

【问题讨论】:

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


    【解决方案1】:

    ReceiveMessageWaitTimeSeconds 用于长轮询。它是 ReceiveMessage 操作等待消息到达 (docs) 的时间长度,以秒为单位。长轮询并不意味着您的客户端将等待设置的全部时间。如果您将其设置为一秒,但在队列中我们已经有足够的消息,您的客户端将立即使用它们,并在处理完成后再次尝试使用。

    如果您想以一定的速率消费一定数量的消息,您可以在您的应用程序上执行此操作(例如,按计划消费消息)。 SQS 本身不提供与您想要完成的类似的任何类型的速率限制。

    【讨论】:

    • 感谢您的澄清。我也对 lambdas 的并发限制做了一些研究,这可能会有所帮助。想知道您是否对我的编辑有意见?
    • 是的,如果您将并发限制设置为 1,并且您知道您的 lambda 可能会运行一秒钟,那可能会起作用。虽然,根据我的经验,lambda 函数往往运行得有点慢,这取决于我们是否有冷启动。默认情况下,Lambda 有 3 秒的默认超时,您可能会发现自己通过简单地使用队列中的一些消息来超过该超时。
    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 2020-07-28
    • 2021-03-28
    • 1970-01-01
    • 2020-04-14
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多