下面是 订单服务(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 调用 MarkOrderPaid | Proto 接口定义 |
| 库存服务 → 回滚 | RabbitMQ 消息 + DB事务 | 自动库存回滚 |