系统集成项目管理工程师 · 高频练习

创建订单接口超时后自动重试,怎样避免同一请求生成两笔订单?

中级 单选题 第 1035 题 中等 系统集成项目管理工程师接口集成接口重试幂等性重复提交
题目

客户端调用“创建订单”接口后没有及时收到响应,于是自动重试。第一次请求其实已经在服务端成功落库,第二次请求又到达服务端,造成重复订单。较合理的改进是()。

A 为一次业务操作携带稳定的幂等键,服务端识别重复键并返回原处理结果,同时用业务唯一约束兜底
B 关闭所有超时机制,让客户端一直等待
C 每次重试都生成新的随机订单号,确保请求彼此不同
D 只在页面上禁止用户连续点击,不处理网络重试
题目类型:原创高频场景题 用途:用于帮助理解系统集成项目管理工程师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

同一次业务操作在重试时应复用同一个幂等键。服务端第一次处理后保存该键与结果,后续收到相同键时返回原结果,而不是再次创建订单;数据库业务唯一约束可以进一步防止并发情况下的重复写入。

选项分析

A

正确,幂等键识别同一业务操作,唯一约束用于应对并发穿透等边界情况。

B

无限等待会占用资源,也不能解决连接中断和未知结果问题。

C

每次生成新订单号会把重试伪装成新业务,正好放大重复订单风险。

D

前端防抖只能减少人工连点,无法阻止网关、客户端或消息系统的自动重试。

本题为什么容易错

很多接口问题被归因于“用户点了两次”,实际重复更常来自超时重试、消息重复投递或并发请求。只修页面按钮,服务端仍然没有业务级防重能力。

先看结论

简短答案

创建订单接口超时后自动重试,怎样避免同一请求生成两笔订单,正确答案是 A(为一次业务操作携带稳定的幂等键,服务端识别重复键并返回原处理结果,同时用业务唯一约束兜底)。同一次业务操作在重试时应复用同一个幂等键。服务端第一次处理后保存该键与结果,后续收到相同键时返回原结果,而不是再次创建订单;数据库业务唯一约束可以进一步防止并发情况下的重复写入。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
为一次业务操作携带稳定的幂等键,服务端识别重复键并返回原处理结果,同时用业务唯一约束兜底 本题正确答案 正确,幂等键识别同一业务操作,唯一约束用于应对并发穿透等边界情况。 看到题干核心场景时优先联想到它
关闭所有超时机制,让客户端一直等待 本题干扰项 无限等待会占用资源,也不能解决连接中断和未知结果问题。 看到该词不要急着选,先判断是否真正解决题干问题
每次重试都生成新的随机订单号,确保请求彼此不同 本题干扰项 每次生成新订单号会把重试伪装成新业务,正好放大重复订单风险。 看到该词不要急着选,先判断是否真正解决题干问题
只在页面上禁止用户连续点击,不处理网络重试 本题干扰项 前端防抖只能减少人工连点,无法阻止网关、客户端或消息系统的自动重试。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 关闭所有超时机制,让客户端一直等待:无限等待会占用资源,也不能解决连接中断和未知结果问题。
  • 每次重试都生成新的随机订单号,确保请求彼此不同:每次生成新订单号会把重试伪装成新业务,正好放大重复订单风险。
  • 只在页面上禁止用户连续点击,不处理网络重试:前端防抖只能减少人工连点,无法阻止网关、客户端或消息系统的自动重试。
复习

知识点详解

幂等表示同一操作重复执行不会产生额外业务效果。查询类操作通常较容易满足幂等,而创建订单、扣款等操作需要显式设计。常见做法是由调用方为一次业务操作生成稳定幂等键,服务端原子地记录处理状态与结果,并结合唯一索引或业务约束防止并发重复。重试策略还应限定次数、退避时间和可重试错误类型。

备考速记

超时不等于没成功;同一次业务重试,要带同一把幂等钥匙。

重复提交在重复提交场景中的作用

幂等设计是在不可靠网络中把重复请求变成可控行为。它不要求系统永不重试,而是要求重试能识别同一次业务意图。若操作本身包含多个下游步骤,还应考虑事务边界、补偿和状态查询,不能只在入口缓存一个响应。

拓展

同类题怎么考

  • 分析接口重试造成的数据重复
  • 选择非幂等操作的防重方案
  • 区分前端防抖与服务端幂等
重复提交在系统集成项目管理工程师软考中的考法

看到“超时但服务端可能已成功”时,先排除再次生成新业务标识的选项。正确方案通常包含稳定业务键、原子状态记录、重复请求返回原结果;若只有前端按钮控制,覆盖面通常不够。

解题思路

先把网络超时和业务失败分开。客户端没收到回包时,服务端可能成功、失败,也可能还在处理。此时盲目再创一单最危险。让第一次和重试带同一个业务身份证,服务端见过就返回上次结果,才是稳妥做法。

考点定位

超时只说明调用方没收到结果,不代表服务端一定没执行。对创建、扣款等非天然幂等操作进行自动重试时,必须让服务端能够识别同一次业务请求。

易错提醒

  • 每次重试重新生成幂等键
  • 只缓存成功状态,不定义处理中和失败后的重试规则
  • 幂等键没有业务范围或过期策略,误伤后续正常请求

备考提示

  • 用支付、下单、创建工单三个场景分别思考重复执行的后果
  • 答接口案例题时把超时、重试、幂等、唯一约束和结果查询连成闭环

你可能还想了解

  • 接口超时后可以直接重试吗?
  • 幂等键每次重试要不要变化?
  • 前端防重复点击能代替服务端幂等吗?
  • 幂等键为什么还要配合唯一约束?

本文小结

创建订单重试应复用同一幂等键,服务端识别重复请求并返回原结果,同时使用业务唯一约束防止并发重复落库。