Skip to content

Watermill 学习文档 ​

基于 Watermill 的 Go 事件驱动编程完整中文学习指南。

文档索引 ​

基础篇 — 核心概念与 API ​

#文档内容
01为什么学习 Watermill同步 vs 异步、事件驱动优势、技术选型对比
02核心概念Message/Pub/Sub/Router/Middleware/CQRS 全景图
03Publisher 与 Subscriber 详解GoChannel 实现、Ack/Nack、多后端切换
04Router 路由机制Handler 注册、消费者组、并发控制、去重
05Middleware 中间件责任链模式、Retry/Timeout/Recoverer/PoisonQueue
06CQRS 组件深入Command/Event 分离、Marshaler、Facade 配置

实战篇 — Kafka 电商实战 ​

#文档内容
07电商服务架构设计微服务拆分、事件契约、技术栈总览
08事件流与 Saga 模式Saga 编舞、补偿事务、状态机、错误处理
09订单服务实现Clean Architecture、HTTP API、事件发布消费
10库存服务与补偿机制乐观锁扣减、补偿回滚、并发安全
11支付服务与外部集成模拟支付、异步处理、外部对接建议
12通知服务与事件聚合多事件订阅、FanOut、多通道通知扩展
13运行与部署指南Docker Compose、启动验证、问题排查

进阶篇 — 深度原理与工程实践 ​

#文档内容
14Kafka 集成详解配置参数、分区策略、Offset 管理、Rebalance
15消息顺序与去重分区顺序保证、幂等策略、去重实现
16可靠性保障投递语义、重试链路、故障恢复、Exactly-once
17可观测性与监控Prometheus、OpenTelemetry、结构化日志
18Outbox 模式与事务消息原子性难题、Forwarder、CDC 对比
19FanIn 与 FanOut消息路由拓扑、广播与合并模式
20性能优化与最佳实践Kafka 调优、反模式、压测建议

扩展篇 — 视野与选型 ​

#文档内容
21多 Pub/Sub 后端对比GoChannel/Kafka/NATS/Redis/RabbitMQ/SQL 对比
22从单体迁移到事件驱动绞杀者模式、双写过渡、Canary 发布
23常见问题与排查FAQ、调试技巧、错误场景分析

推荐学习路径 ​

mermaid
graph LR
    A[新手入门] --> B[基础篇 01-06]
    B --> C[运行 basic/ 示例]
    C --> D[上手实战]
    D --> E[实战篇 07-13]
    E --> F[运行 ecommerce/ 完整流程]
    F --> G[深入原理]
    G --> H[进阶篇 14-20]
    H --> I[扩展视野]
    I --> J[扩展篇 21-23]

路径 1:新手入门(1-2 天) ​

  1. 阅读 基础篇 01-06,理解核心概念
  2. 运行 basic/ 目录下 5 个示例,动手修改代码
  3. 完成对 Pub/Sub、Router、Middleware、CQRS 的直观感受

路径 2:上手实战(2-3 天) ​

  1. 阅读 实战篇 07-13,理解事件驱动电商架构
  2. 启动 Docker Compose 基础设施
  3. 依次启动 4 个微服务,通过 curl 触发 Saga 流程
  4. 追踪日志,理解完整事件流

路径 3:深入原理(3-5 天) ​

  1. 阅读 进阶篇 14-20,掌握生产级实践
  2. 理解 Kafka 集成、可靠性、可观测性、Outbox 模式
  3. 思考:如何将项目改造为生产级别?

路径 4:扩展视野(1-2 天) ​

  1. 阅读 扩展篇 21-23,拓展技术视野
  2. 比较不同 Pub/Sub 后端的适用场景
  3. 思考:当前团队系统如何迁移到事件驱动?

项目代码结构 ​

watermill/
├── basic/                    # 基础示例(GoChannel 零依赖)
│   ├── 01-pubsub/main.go     # Publisher + Subscriber
│   ├── 02-router/main.go     # Router 消息路由
│   ├── 03-middleware/main.go # 中间件:重试/超时/恢复
│   ├── 04-cqrs/main.go       # CQRS 命令与事件分离
│   └── 05-metrics/main.go    # Prometheus 指标采集
├── ecommerce/                # Kafka 事件驱动电商
│   ├── api/proto/            # Protobuf 事件定义
│   ├── cmd/                  # 4 个微服务入口
│   │   ├── order-service/
│   │   ├── inventory-service/
│   │   ├── payment-service/
│   │   └── notification-service/
│   ├── internal/             # Clean Architecture 分层
│   │   ├── order/            # 订单服务:service/biz/data
│   │   ├── inventory/        # 库存服务
│   │   ├── payment/          # 支付服务
│   │   └── notification/     # 通知服务
│   ├── pkg/                  # 共享基础设施
│   │   ├── kafka/            # Kafka 连接管理
│   │   ├── config/           # Viper YAML 配置
│   │   ├── database/         # GORM + MySQL
│   │   └── events/           # Protobuf 序列化 + Topic 常量
│   ├── deploy/               # Docker Compose
│   └── configs/              # 各服务配置文件
└── docs/                     # 本文档目录

外部资源 ​

资源链接
Watermill 官方仓库https://github.com/ThreeDotsLabs/watermill
Watermill 官方文档https://watermill.io
Kafka 适配器https://github.com/ThreeDotsLabs/watermill-kafka
Sarama (Go Kafka 客户端)https://github.com/IBM/sarama
GORM 文档https://gorm.io
Protobuf 指南https://protobuf.dev
Zap 日志库https://github.com/uber-go/zap

快速开始:参考 运行与部署指南 5 分钟跑通完整电商系统。