AWS SQS+Lambda,我应该删除消息吗?节点JS

AWS SQS+Lambda, should I delete messages? NodeJS

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

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

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

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

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

谢谢!

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

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