Node.js AWS SQS&x2B;Lambda,我应该删除邮件吗?NodeJS

Node.js AWS SQS&x2B;Lambda,我应该删除邮件吗?NodeJS,node.js,amazon-web-services,aws-lambda,amazon-sqs,Node.js,Amazon Web Services,Aws Lambda,Amazon Sqs,我最近开始使用AWS,我的第一项工作是使用lambda函数使用SQS队列 我知道我不需要调用receiveMessage,因为lambda函数已在此处接收消息: exports.handler = async(event, context) => { let i = 0; for (const record of event.Records) { ... } }; 我的问题是:我应该为收到的每条消息调用sqs.deleteMessage吗? 我知道lambda函数会自动删除已处理的消息

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

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

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

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


谢谢大家!

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


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

谢谢,因此我不需要手动删除消息,正确的做法是控制函数的执行流,在需要时抛出错误。其余部分由SQS本身控制。@FabioK是的,完全正确。回答是,您需要在使用批处理时手动从队列中删除消息,否则,即使其中一条消息已成功处理,您的消息也会批量返回队列。