一个微服务订单支付系统
项目分4个service、order、stock、payment微服务,代码解耦,独立容器运行,本地方便开发所以集合在一起。
- 基于DDD领域驱动设计、CQRS模式
- 微服务间使用gRPC通信,order与payment之间采用rabbitMQ异步通信。
- 使用protobuf, protoc, openAPI, oapi-codegen 生成grpc服务、http服务api框架代码
- 使用consul和viper实现服务发现和注册
- 使用成OpenTelemetry和Jaeger实现全链路追踪,解决了异步追踪断裂问题
- 集成Prometheus和Grafana实现关键指标监控,使用logrus实现结构化日志
- 实现基于redis的分布式锁
- 使用stripe完成支付
- 用户下单发起http请求,order服务向调用stock的grpc服务校验库存并扣减,返回订单状态。
- order服务创建并存储订单信息,向消息队列中发送订单。
- payment从消息队列中接收消息,调用stripe api生成支付链接,并调用order grpc服务更新订单状态信息为等待支付和返回支付链接。
- 前端轮询order服务api,Get订单信息,获取支付url并跳转。用户点击链接支付后,payment使用webhook从stripe服务器获取支付状态,写入消息队列。
- order获取消息并更新订单状态,根据状态信息跳转支付成功。