跳至正文
← 全部技术洞察

TECHNICAL INSIGHTS / 技术洞察

.NET 调用第三方接口,如何同时设计超时、重试与幂等?

第三方请求偶尔失败时,直接增加重试次数很容易放大负载。对于创建、扣费或发送类操作,响应丢失还会让调用方无法确定业务是否已完成。调用策略必须同时考虑等待预算和重复效果。

给每类操作定义失败语义

查询与写入不能统一处理。请求未发出、已发出但超时、对方明确拒绝,是不同状态。写入结果未知时,优先使用业务查询或对账确认,不能把超时直接解释为对方没有执行。

重试需要条件和总预算

限定可重试错误、尝试次数、间隔以及整条业务允许等待的时间。多层各自重试会叠加,应明确由哪一层负责。对于已有流量压力的依赖,持续快速重试可能使恢复更困难。

管理连接与处理器生命周期

可使用 IHttpClientFactory 等方式管理客户端配置与处理器复用,但仍需理解 DNS 更新、凭证、Cookie 和处理器状态的影响。不要把每次 new HttpClient 或永远共享一个任意配置的实例当成通用答案。

验收“成功但响应丢失”

让测试服务先记录业务成功,再模拟调用方收不到结果。检查系统是否避免重复执行、是否能查询最终状态,并留有可追踪的请求标识。只测试连接失败无法覆盖这类风险。

常见问题:所有 5xx 都应该重试吗?

不能一概而论。需要结合操作副作用、对方契约和总等待预算判断,并为结果未知提供查询或人工处理路径。

技术参考:微软:IHttpClientFactory。具体接口与配置请结合使用版本核对。

将评估落实到你的系统

如果内部团队需要把这些约定落到可运行的工程中,可以通过微服务基础架构建设沟通接口、公共能力与交接范围,先以一个业务场景验证方案。