【发布时间】:2022-11-22 10:45:12
【问题描述】:
我有一个非常标准的设置,可以将 SQS 提供给 Lambda。 lambda 读取消息并向定义的端点发出 Web 请求。
如果我在处理 SQS 消息期间遇到由于消息格式引起的异常,那么我会将消息放入死信队列。
如果我遇到 Web 请求错误,我会将消息放回馈送队列,以便稍后发出 HTTP 请求。
这似乎工作正常,但我们刚刚遇到一个问题,即 HTTP 端点已关闭 4 天,并且馈送队列丢弃了消息。我想这与队列的保留期设置有关。
问题
-
有没有办法知道在 lambda 中一条消息被重播了多少次?
-
供给队列如何知道重新入队的消息与最初放入队列的消息相同?
-
我目前没有明确地从队列中删除消息。没有那个,似乎没有引起任何问题,没有重新处理消息或任何东西。我应该明确删除它们吗?
【问题讨论】:
-
您的“将 SQS 提供给 Lambda 的标准设置”是什么?
-
关于 SQS 消息保留主题,根据文档:“您可以将 Amazon SQS 消息保留期配置为 1 分钟到 14 天的值。默认值为 4 天。一旦达到消息保留配额,您的消息将自动删除了。”
-
另请注意preventing duplicate message processing 上的这篇知识库文章。
-
当您“将消息放入死信队列”时,您是说您的 Lambda 函数在该队列中创建了一条新消息,还是让 SQS 将消息移动到该队列?另外,当您说“我将消息放回馈送队列”时,您是说向 SQS 队列写入一条新消息,还是只是返回错误代码并让 SQS 将现有消息保留在队列中?
-
@JohnRotenstein - 我创建了一条新消息并将其放入死信队列。 SQS 将在保留期到期后移动它,但我知道在处理过程中消息何时格式错误,因此我创建了一条新消息并将其移动到死信队列。是的,我创建了一条新消息并将其放回 SQS 队列。我的 lamda 在所有情况下都返回 200,所以我认为应该从队列中删除消息。
标签: amazon-web-services amazon-sqs