【问题标题】:AWS SQS+Lambda, should I delete messages? NodeJSAWS SQS+Lambda,我应该删除消息吗?节点JS
【发布时间】:2021-03-22 02:58:15
【问题描述】:

我最近开始使用 AWS,我的第一份工作是使用 lambda 函数使用 SQS 队列。

我知道我不需要调用 receiveMessage,因为 lambda 函数已经在此处接收消息:

exports.handler = async(event, context) => {
let i = 0;

for (const record of event.Records) {
...
}
};

我的问题是:我应该为收到的每条消息调用 sqs.deleteMessage 吗? 我知道 lambda 函数会自动删除已处理的消息,但一位朋友告诉我,我仍然必须手动调用 deleteMessage,因为如果发生错误,所有消息都会返回队列如果我不手动删除每条消息。

谢谢!

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda amazon-sqs


    【解决方案1】:

    如果您的 Lambda 函数返回成功代码,则该消息将被自动删除。如果发生错误,并且您的函数返回错误响应,则消息将再次排队(取决于队列的设置)。您永远不应该自己删除该消息。为什么要绕过 SQS 内置的错误处理和重试功能?

    如果您从不希望重试消息,则只需适当地配置队列即可。特别是,应使用最大接收数和可选的 SQS 队列上的 DLQ 设置来定义错误处理行为。

    【讨论】:

    • 谢谢,所以我真的不需要手动删除消息,正确的做法是控制我的函数的执行流程,在需要时抛出错误。其余的由 SQS 自己控制。
    • @FabioK 是的。
    • 误导性回答,使用批量时需要手动从队列中删除消息,否则即使其中一条处理成功,您的消息也会批量返回队列。
    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多