Amazon SNS HTTP订阅是否可配置4xx错误码触发投递重试
AWS SNS HTTP/HTTPS订阅投递重试相关问题解答
首先明确结论:SNS没有原生的配置项可以开启4xx错误码的投递重试,默认仅对以下场景触发重试:
- 5xx服务端错误状态码
- 网络连接异常(连接超时、连接被拒绝、DNS解析失败等)
设计逻辑说明
4xx属于客户端错误范畴,SNS默认判定这类错误是请求本身非法、端点主动拒绝接收消息导致,重试也大概率无法成功,因此不会进入重试队列,直接判定为投递失败。常见的4xx场景包括401未授权、403禁止访问、404端点不存在、400请求参数错误等,反复重试这类请求不仅会浪费资源,还有可能被目标端点判定为恶意攻击。
可落地的替代方案
如果你的业务场景确实需要对特定4xx错误做重试,可以通过以下两种方式实现:
- 在自己的HTTP/HTTPS端点侧做适配:针对需要触发重试的4xx场景,不直接返回4xx状态码,改为返回5xx状态码,即可触发SNS默认的重试策略。也可以在端点侧自行缓存需要重试的消息,本地实现重试逻辑后返回200状态码,避免占用SNS的重试配额。
- 为SNS订阅绑定死信队列(DLQ):所有投递失败的消息(包括4xx导致的投递失败)都会被转发到DLQ中,你可以自行消费DLQ中的消息,实现自定义的重试规则。
内容的提问来源于stack exchange,提问作者AshishT
相关产品推荐
相关产品推荐

