【问题标题】:SQS Lambda Trigger with Visibility Timeout extension具有可见性超时扩展的 SQS Lambda 触发器
【发布时间】:2021-12-01 06:16:50
【问题描述】:

我正在研究一个解决方案,其中我有一个带有 Lambda 触发器的 SQS 队列。我的理解是Lambda会批量接收消息进行处理,一旦Lambda函数成功,SQS队列中的消息就会被自动删除。但是,我如何只允许删除其中的一些消息?

让我们假设这个用例: Lambda 函数接收一批有 10 条消息,只有 7 条消息有效并且可以处理,其他 3 条消息需要稍后重新处理。

我最初的想法是我可以通过boto3.sqs.change_visibility_timeout 更新 3 条消息中的每条消息的可见性超时,以便在超时后对其进行重新处理,但是,由于整体 lambda 函数执行成功,所有 10 条消息都将从 SQS 队列中删除。

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    是的,默认情况下,Lambda 函数会在成功后删除所有消息。您需要在代码中处理此问题,而不是通过更改消息的可见性超时。

    添加实际处理失败消息的 DLQ(死信队列)(消息在尝试处理一定次数的失败尝试后转到 DLQ,具体取决于您的设置方式)

    你有几个选择:

    1. 您可以自己处理每个项目,并删除处理成功的消息。如果消息不成功,您可以抛出错误,并且不会被 lambda 函数自动删除
    2. 如果您使用 JavaScript,您可以尝试使用 Middy
    3. 如果你使用Python,你可以使用Lambda Powertools Python

    【讨论】:

    • 感谢您的回复。看起来 Lambda PowerTools 是我一直在寻找的。根据我对 Lambda PowerTools 的理解,我应该仍然可以使用 SQS Lambda 触发器并通过允许删除成功处理的消息和未删除的消息来自己处理每个项目?
    • 是的,没错
    猜你喜欢
    • 2021-06-16
    • 2017-05-09
    • 2020-05-17
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2021-03-28
    • 2021-11-28
    • 2016-02-29
    相关资源
    最近更新 更多