订单,支付,库存微服务联动逻辑

134 阅读2分钟

下面是 订单服务(Order Service)支付服务(Payment Service)库存服务(Inventory Service) 三者之间的联动逻辑说明,适用于一个微服务架构中下单、支付、库存控制的完整流程:


🧭 业务流程概览

1. 用户下订单(CreateOrder)

  • 客户端发起下单请求(带 token
  • 认证中间件解析出 user_id
  • 订单服务 创建订单,状态为 PENDING
  • 订单服务 通过 RabbitMQ 发布事件 order.created
  • 库存服务 监听 order.created 事件,尝试预扣库存(reserved)
  • 成功 → 更新库存数据库 → 发布 stock.reserved
    失败 → 发布 stock.failed,通知订单失败

2. 用户完成支付(MarkOrderPaid)

  • 客户端调用 支付服务 发起支付

  • 支付完成后,支付服务

    • 通知第三方支付系统确认
    • 通知 订单服务(通过 gRPC 或 RabbitMQ)调用 MarkOrderPaid
    • 状态更新为 PAID
    • 发布事件 order.paid

3. 发货逻辑(Shipped)

  • 订单服务 根据业务规则或手动操作,将状态变更为 SHIPPED
  • 发布事件 order.shipped,供物流系统处理

4. 异常回滚(失败或取消)

  • 库存预扣失败 → 发布 order.failed订单服务 设置订单为 FAILED
  • 用户取消订单 → 状态改为 CANCELED → 发布 order.canceled
  • 库存服务 收到取消/失败事件 → 回滚库存

🔁 服务联动逻辑细化

发起方事件触发接收方处理逻辑
用户下订单订单服务创建订单(PENDING),发送 order.created
订单服务order.created库存服务预扣库存,成功→发送 stock.reserved,失败→stock.failed
库存服务stock.reserved订单服务订单维持 PENDING,等待支付
库存服务stock.failed订单服务标记订单 FAILED,可通知用户
用户完成支付支付服务创建支付记录,确认支付后调用 MarkOrderPaid gRPC
支付服务支付成功订单服务更新状态为 PAID,发送 order.paid
用户取消订单订单服务状态设置为 CANCELED,发送 order.canceled
订单服务order.canceled库存服务回滚预扣库存

🧩 技术细节建议

服务通信方式技术栈建议
用户 → 订单服务RESTful + Gin 中间件验证Gin + Redis Token
订单服务 → 库存服务RabbitMQ 消息通知消息结构 order.created
支付服务 → 订单服务gRPC 调用 MarkOrderPaidProto 接口定义
库存服务 → 回滚RabbitMQ 消息 + DB事务自动库存回滚