Go + Gin + Vue 3 实现的电商交易系统:从商品浏览、购物车、下单、支付、退款到后台运营,完整覆盖 C 端购物链路和 B 端管理链路。
测试账号:test_user / 123456
- 微服务拆分完整落地:9 个 Go 服务独立进程运行,Caddy 统一网关路由,服务各自连接
goshop_*独立数据库;服务间同步调用为 gRPC-only。 - 交易一致性闭环:普通订单覆盖价格试算、优惠券锁定、库存预占、支付回调、库存确认、售后退款;订单、支付、售后通过 Outbox/Inbox + NATS JetStream 做跨库最终一致性。
- 高并发库存链路:秒杀和下单库存预扣走 Valkey/Redis Lua 原子脚本,先在内存层完成库存判断和扣减,避免热点 SKU 直接压垮数据库行锁。
- 延迟队列释放库存:基于 Valkey ZSet 实现轻量延迟队列,普通订单 30 分钟、秒杀订单 15 秒超时检查,后台调度器自动取消未支付订单并回滚库存。
- 可运行、可部署、可验证:提供本地依赖 bootstrap、微服务 smoke run、Docker 单镜像和 Go/Vue 回归命令。
- 前后台产品闭环:Vue 3 前台覆盖商品、购物车、结算、订单详情;后台覆盖商品、订单、退款、财务、用户和技术引擎监控。
flowchart LR
Browser[Web / Admin] --> Gateway[Caddy Gateway :8080]
Gateway --> User[user :8101]
Gateway --> Product[product :8102]
Gateway --> Inventory[inventory :8103]
Gateway --> Promotion[promotion :8104]
Gateway --> Order[order :8105]
Gateway --> Payment[payment :8106]
Gateway --> Aftersale[aftersale :8107]
Gateway --> Cart[cart :8108]
Gateway --> Scheduler[scheduler :8109]
Order <-->|gRPC first| Product
Order <-->|gRPC first| Inventory
Order <-->|gRPC first| Promotion
Payment <-->|gRPC first| Order
Aftersale <-->|gRPC first| Order
Scheduler -->|cancel expired pending order| Order
Inventory --> Valkey[(Valkey / Redis)]
Scheduler --> Valkey
User --> PG[(PostgreSQL service DBs)]
Product --> PG
Inventory --> PG
Promotion --> PG
Order --> PG
Payment --> PG
Aftersale --> PG
Cart --> PG
Order --> NATS[NATS JetStream]
Payment --> NATS
Aftersale --> NATS
- 用户在前台选择 SKU 并提交订单。
- checkout 服务读取地址、商品、优惠券候选项,完成价格试算。
- order 服务锁定优惠券、调用 inventory 预占库存、创建订单和支付单。
- payment 服务接收 mock 支付回调,幂等更新支付状态并发布支付成功事件。
- order/inventory 消费事件确认订单和库存状态;超时未支付由 scheduler 触发取消并释放库存。
- aftersale 服务处理退款申请和后台审核,退款成功后回补库存并更新订单状态。
| 层级 | 技术 |
|---|---|
| 后端 | Go, Gin, GORM, gRPC, zap |
| 数据 | PostgreSQL, Valkey/Redis, NATS JetStream |
| 前端 | Vue 3, Pinia, Vue Router, Vite, TypeScript |
| 网关与部署 | Caddy, Docker, Cloudflare Tunnel 配置样例 |
| 工程化 | OpenAPI 静态文档、服务 smoke check、Go/Vue 单元测试 |
bash scripts/bootstrap_local_env.sh
./deploy/bootstrap.sh --seed脚本会按本地环境自动处理 PostgreSQL、Valkey/Redis、NATS JetStream,并基于 config.example.yaml 生成本地配置。
cd web
bun install
bun run build
cd .../deploy/build.sh
./deploy/smoke_run.sh start
./deploy/smoke_run.sh check访问:
- 前台与后台入口:http://localhost:8080
- 网关健康检查:http://localhost:8080/gateway-health
- 服务健康检查:http://localhost:8080/health
停止本地服务:
./deploy/smoke_run.sh stopDocker 单镜像包含 9 个 Go 服务、前端静态资源和 Caddy 网关:
docker build -t ghcr.io/<owner>/goshop:<tag> .
docker push ghcr.io/<owner>/goshop:<tag>主机部署使用 deploy/Caddyfile.microservices 和 deploy/systemd/goshop@.service。deploy/k8s/ 保留但本轮不处理,本机不要求 K8s 真实或 dry-run 验证。
详细部署顺序、环境变量和 systemd 命令见 docs/deployment.md。
GOCACHE=/tmp/goshop-go-build go test ./...
cd web && bun run build
./deploy/build.sh
docker build -t goshop:test .
./deploy/smoke_run.sh start
./deploy/smoke_run.sh check
./deploy/smoke_run.sh stop.
├── cmd/ # 9 个微服务入口
├── api/proto/ # 内部 gRPC 合约
├── core/ # DB、Redis、NATS、gRPC、鉴权、指标等基础设施
├── handlers/ # HTTP API 控制器
├── internal/ # checkout/order/payment/inventory/outbox 等领域逻辑
├── models/ # GORM 数据模型
├── web/ # Vue 3 前台与后台
├── deploy/ # Caddy、Docker、systemd、smoke run 脚本
└── docs/ # OpenAPI、微服务、部署和测试交接文档
- 微服务拆分说明:服务端口、Caddy 网关、gRPC-only 内部同步调用。
- 部署说明:Cloudflare Tunnel、Docker、systemd、检查和回滚。
- 事件说明:Outbox/Inbox 与 NATS JetStream 事件。
- Swagger/OpenAPI:公开 HTTP API 静态规格。
- 测试交接提示词:前端 E2E、微服务冒烟、Swagger QA 等非核心扩展测试。












