Skip to content

为现货批量下单提供幂等键与结果恢复能力 #60

Description

@Serein207

背景

CreateSpotOrders 创建成功后如果响应在网络中丢失,前端无法判断订单是否已经创建。直接重试可能重复扣减库存并生成重复订单;不重试又只能让用户去订单列表人工确认。

需求

  • CreateSpotOrdersRequest 增加客户端生成的 idempotency_keyrequest_id
  • 幂等范围至少绑定当前登录用户和业务操作,不能只依赖客户端 IP。
  • 同一 key、相同 payload 的重复请求返回第一次创建的完整 spot_order_details,不得再次扣减库存或创建账单。
  • 同一 key、不同 payload 返回明确冲突错误。
  • 提供按幂等 key 查询创建结果的 RPC,或保证重放创建 RPC 可以可靠恢复原结果。
  • 明确幂等记录保留期限,期限应覆盖正常客户端重试窗口。

一致性要求

  • 批量订单创建、库存扣减、账单创建和幂等结果记录处于同一事务边界。
  • 并发发送相同 key 时只能执行一次业务写入。
  • 失败事务不得留下可被当作成功恢复的半成品记录。

验收标准

  • Proto、实现和接口文档同步更新并发布到 Buf。
  • 测试覆盖响应丢失后重试、并发相同 key、相同 key 不同 payload、事务回滚和幂等记录过期。
  • 前端可在超时或连接中断后安全重试并跳转到已创建订单,而不会产生重复订单。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions