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 设置来定义错误处理行为。
我最近开始使用 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 设置来定义错误处理行为。