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

AWS Lambda调用错误时未触发SQS死信队列

莫选
2023-03-14

我有一个AWS Lambda函数,它订阅一个DynamoDB流,并配置了一个SQS死信队列(DLQ)。我可以看到在管理控制台中配置了正确的队列。此外,我还注意为DLQ上的sqs:sendmessage赋予函数权限。

订阅可以工作,但仍然会在调用错误时“挂起”,就像没有配置DLQ一样。例如,如果有一条消息导致未处理的异常,函数将继续重试该消息,直到将其从流中删除。我可以看到调用错误的数量增加了,函数的Cloudwatch仪表板中没有显示DLQ错误。SQS队列将保持为空。

我想要的是失败的消息被转发到我的DLQ,并且订阅继续到下一个消息。有什么想法吗?

共有1个答案

太叔鸿博
2023-03-14

我相信这是因为DynamoDB流是基于流的事件源。lambda文档指出,在处理基于流的事件源时,“如果lambda函数失败,AWS lambda将尝试处理错误的一批记录,直到数据过期为止”

根据我的理解,lambda函数将重试,直到事件被成功处理或者过期并从流中消失,该事件从不被lambda函数“丢弃”,就像它们在非基于流的事件源中一样。

如果您希望丢弃某些事件,将事件手动发布到队列/主题并成功返回,那么您可能必须将自己的失败处理作为主lambda函数的一部分来实现。

 类似资料:
  • 我正在尝试设计一个基于SQS、Lambda和SNS的小型消息处理系统。在失败的情况下,我希望将消息排入死信队列(DLQ)中,并调用webhook。 目前,如果一切顺利,流程应该是这样的: SQS(用于处理重试)将消息排入队列 lambda由SQS调用并处理消息 lambda发送webhook,并正常完成 如果lambda中的某些东西出错(无法调用success webhook,无法处理手头的任务)

  • 我正在使用AWS SQS和死信队列。 这可能吗?我是不是缺少了一个配置选项? 问候你,伊多

  • 未创建我的exchange和dlq。我在下面的YML中有以下内容。我确实创建了一个匿名队列,但也没有发布消息。任何想法。

  • 我试图使用他们文档中提到的masstransit配置将SNS主题订阅到SQS队列。消息已发布,但不会出现在SQS队列中。SQS队列名称:“测试”,SNS主题名称:“kbbico手动替换”。

  • 死信队列(Dead Letter Queue)本质上同普通的Queue没有区别,只是它的产生是为了隔离和分析其他Queue(源Queue)未成功处理的消息。 创建死信队列的方法参见createQueue() API,与创建普通队列无异, 死信队列不可调用deadMessage(), deadMessageBatch API,其他操作都与对普通Queue的操作无异。 为了将源Queue的未能成功处理

  • 对于异步的触发器,平台会对函数失败的任务进行最多3次重试。 在新建触发器的时候,为触发器配置一条死信队列,从用户的EMQ队列中选择一条,用于接收函数失败的任务。 在设置死信队列前,请对group: CIf76b0600-24e9-42c4-acf3-d491fbd9fd71​ 授予 FULL_CONTROL 权限,若不授予权限,平台将丢弃失败的任务信息。 消息的内容如下,以后可能增加字段,请用户在