Lambda 是否有必要在处理后从 SQS 队列中删除消息?
Is it necessary for a Lambda to delete messages from an SQS queue after processing?
我正在此处查看 AWS SQS 文档:https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/ReceiveMessage.html#receive-sqs-message
我的理解是我们需要在处理完消息后使用 AmazonSQSClient.DeleteMessage()
删除消息,但是当我们使用 SQS 触发的 Lambda 时是否有必要这样做?
我正在使用由 SQSEvent
触发的 Lambda 函数进行测试,除非我弄错了,否则看来如果 Lambda 函数运行完成而没有抛出任何错误,消息不会 return 到 SQS 队列。如果这是真的,我宁愿避免对 AmazonSQSClient.DeleteMessage()
.
进行不必要的调用
Here 是 2019 年的一个类似问题,最上面的答案说 SDK 不会自动删除消息,需要在代码中明确删除它们。我想知道从那时起是否有任何改变。
想法?
Amazon SQS 不会在为您检索消息后自动删除消息,以防您未成功接收消息(例如,如果消费者失败或您失去连接)。要删除消息,您必须发送单独的请求以确认您已成功接收并处理该消息。
这没有改变,将来可能也不会改变,因为我们无法让 SQS 在所有情况下明确知道消息是否已成功处理。如果 SQS 开始“假设”下游发生的事情,它在许多情况下都有变得不可靠的风险。
是的,否则下次您请求一组消息时,您会收到相同的消息 - 也许不会在下一次通话时收到,但最终您会收到。您可能不想一遍又一遍地处理同一组消息。
这里的关键是你使用的是AWS Lambda integration with SQS。在这种情况下,AWS Lambda 处理从队列中检索消息(通过 event
对象使它们可用),并在 Lambda 函数 returns 成功状态时自动为您从队列中删除消息。如果 Lambda 函数抛出错误,它不会从队列中删除消息。
使用 AWS Lambda 与 SQS 集成时,您根本不应使用 AWS SDK 与 SQS 队列交互。
我正在此处查看 AWS SQS 文档:https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/ReceiveMessage.html#receive-sqs-message
我的理解是我们需要在处理完消息后使用 AmazonSQSClient.DeleteMessage()
删除消息,但是当我们使用 SQS 触发的 Lambda 时是否有必要这样做?
我正在使用由 SQSEvent
触发的 Lambda 函数进行测试,除非我弄错了,否则看来如果 Lambda 函数运行完成而没有抛出任何错误,消息不会 return 到 SQS 队列。如果这是真的,我宁愿避免对 AmazonSQSClient.DeleteMessage()
.
Here 是 2019 年的一个类似问题,最上面的答案说 SDK 不会自动删除消息,需要在代码中明确删除它们。我想知道从那时起是否有任何改变。
想法?
Amazon SQS 不会在为您检索消息后自动删除消息,以防您未成功接收消息(例如,如果消费者失败或您失去连接)。要删除消息,您必须发送单独的请求以确认您已成功接收并处理该消息。
这没有改变,将来可能也不会改变,因为我们无法让 SQS 在所有情况下明确知道消息是否已成功处理。如果 SQS 开始“假设”下游发生的事情,它在许多情况下都有变得不可靠的风险。
是的,否则下次您请求一组消息时,您会收到相同的消息 - 也许不会在下一次通话时收到,但最终您会收到。您可能不想一遍又一遍地处理同一组消息。
这里的关键是你使用的是AWS Lambda integration with SQS。在这种情况下,AWS Lambda 处理从队列中检索消息(通过 event
对象使它们可用),并在 Lambda 函数 returns 成功状态时自动为您从队列中删除消息。如果 Lambda 函数抛出错误,它不会从队列中删除消息。
使用 AWS Lambda 与 SQS 集成时,您根本不应使用 AWS SDK 与 SQS 队列交互。