AWS SNS消息重试求助:如何在订阅中配置重试策略?
AWS SNS Lambda订阅的重试策略配置说明
首先明确:SNS的deliveryPolicy仅支持HTTP/HTTPS协议的订阅,你当前使用的lambda协议无法通过deliveryPolicy自定义重试逻辑。
Lambda订阅的默认重试机制
对于Lambda协议的SNS订阅,AWS会自动执行默认重试规则:
- 默认重试3次,重试间隔依次为1秒、5秒、20秒
- 若3次重试全部失败,消息会被转发到你配置的
RedrivePolicy指定的死信队列(DLQ)
自定义Lambda订阅重试的替代方案
如果需要更灵活的重试控制,可以采用以下两种方式:
- 在Lambda函数内部实现重试逻辑:捕获调用失败的场景,在函数内通过延迟重试(如结合AWS Step Functions)处理特定错误
- 引入SQS作为中间层:让SNS将消息发送到SQS队列,再由Lambda消费SQS队列。SQS支持通过
RedrivePolicy自定义重试次数、可见性超时等策略,灵活性更高
你的CloudFormation代码说明
当前代码已经配置了死信队列,这是Lambda订阅下处理失败消息的正确方式,无需添加deliveryPolicy(添加后也不会生效):
ResPartnerSubscription: DependsOn: - ResPartnerTopic Type: AWS::SNS::Subscription Properties: TopicArn: !Ref ResPartnerTopic Protocol: lambda Endpoint: !GetAtt ProgramDeviceSyncSns.Arn RedrivePolicy: deadLetterTargetArn: !GetAtt DeadLetterQueue.Arn
内容的提问来源于stack exchange,提问作者Muhammad Muiz Ather
相关产品推荐
相关产品推荐

