当前位置: 首页 > 知识库问答 >
问题:

当触发的Lambda函数处理消息失败时,如何防止AWS SQS删除该消息?

毕和志
2023-03-14

我已经部署了一个AWS Lambda函数,它在SQS队列接收到消息时触发。该函数向Rest API发出请求,如果响应不是Ok,则需要再次处理SQS消息。

这就是为什么我需要将消息重新发送到队列,但我更愿意以编程方式删除SQS消息,尽管我找不到如何配置SQS。我尝试过消息保留,但似乎触发器事件会导致消息被删除。

共有1个答案

缑赤岩
2023-03-14

从AWS Lambda重试行为-AWS Lambda:

如果您将Amazon SQS队列配置为事件源,AWS Lambda将轮询队列中的一批记录并调用Lambda函数。如果调用失败或超时,批处理中的每条消息都将返回队列,并且一旦可见性超时期限到期,每条消息都可供处理。(可见性超时是Amazon Simple Queue服务阻止其他消费者接收和处理消息的一段时间)。

一旦调用成功处理了一个批处理,该批处理中的每条消息都将从队列中删除。当一条消息没有被成功处理时,它要么被丢弃,要么如果您配置了Amazon SQS死信队列,则故障信息将定向到那里供您分析。

因此,看起来(从读到这里),一个简单的选项将在队列上设置一个高可见性超时,然后在函数无法处理消息时引发一个错误。在配置的超时期间,此消息将保持不可见,然后将重新出现在队列中进行处理。如果它超过了允许的重试次数,它将被删除或移动到死信队列(如果配置)。

 类似资料:
  • 当消息到达SQS时,如何触发AWS Lambda函数(Python),并将消息传递给HTTPendpoint,在处理API中的数据后,从SQS队列中删除消息?如何在Python lambda中实现这一点?

  • 但是,如果我的Lambda不期望任何输入,它将自己转到SQS并拉出消息,有输入有意义吗?我是否可以让它无效,或者甚至完全使用其他方法签名(当然,在本例中不实现那个接口)?

  • 主要内容:一、业务场景,二、意外宕机,问题凸现,三、总结一、业务场景 这篇文章,我们来看看订单服务和消息服务是如何基于MQ来收发消息的。 我们稍微把这个图细化一点,简单来说就是多个订单服务实例给queue推送消息,多个仓储服务每个消费一部分消息。如下图所示: 二、意外宕机,问题凸现 假如你线上对MQ技术的使用就到此为止了,那么基本可以跟offer说拜拜了。。。 因为如果是我的话,作为一个面试官就没法继续往下问了。你这个MQ的使用以及理解的深度仅此而已的

  • 是否存在防止DynamoDB流在每次DynamoDB更改时触发λ的方法? 这些数字并不准确,但是假设step函数将连续运行10次,那么它将更新DynamoDB 3次。在step函数触发lambda之前,这是调用lambda的30倍。有什么方法可以阻止这些lambda调用吗?

  • 我有一个lambda函数,负责检查服务器状态。当SQS收到新消息时需要调用它,并且不允许在SQS中更改任何内容。我尝试使用SQS Lambda触发器,但它会将消息推送到Lambda函数中= 我正在寻找处理这个问题的方法。我尝试使用CloudWatch来处理这个问题,但我不知道这是否可能?当SQS收到新消息时,Cloudwatch如何触发Lambda函数? 提前谢谢。