开源的 MQTT 消息代理服务器,支持 MQTT 5.0、3.1.1 和 3.1 协议,并附带 C/C++ 客户端库与命令行工具。
ThreeDotsLabs/watermill
一个 Go 语言库,用统一的发布/订阅接口构建事件驱动应用,支持 Kafka、RabbitMQ、NATS、SQL 等多种消息后端。
- Star
- 9,927
- Fork
- 515
- 未关闭 Issue
- 86
- 最近提交
- 2个月前
这是什么?
Watermill 是一个用于处理消息流的 Go 库,面向事件驱动应用,可用于事件溯源、CQRS、Saga 以及基于消息的 RPC 等场景。其核心抽象是一个接收消息并返回新消息或错误的处理函数,之后的行为由所选中间件决定。
库中定义了统一的 Publisher 和 Subscriber 接口,同一套业务代码可以切换到不同的消息后端运行。已支持的后端包括 Kafka、RabbitMQ(AMQP)、NATS JetStream、Redis Streams、Google Cloud Pub/Sub、AWS SNS/SQS,以及 MySQL、PostgreSQL 等 SQL 数据库,另有用于本地开发的内存 GoChannel。各个 Pub/Sub 实现分别位于组织下的独立仓库中。
项目已发布 v1.0.0 版本,各实现通过共享测试套件验证,并在开启竞态检测和并行压测模式下运行。项目还给出了单机环境下不同后端的吞吐量对比数据。
核心功能
- 01为多种消息中间件提供统一的 Publisher 和 Subscriber 接口
- 02基于处理函数的模型,处理函数可返回新消息或错误
- 03通过中间件组合重试等处理逻辑
- 04支持 Kafka、RabbitMQ、NATS JetStream、Redis Streams、Google Cloud Pub/Sub、AWS SNS/SQS 及 SQL 数据库
- 05提供内存 GoChannel,便于本地开发和测试
适用场景
- 构建通过消息在组件之间通信的事件驱动服务
- 在 Go 中实现事件溯源或 CQRS 读模型
- 使用 Saga 协调长时间运行的业务流程
- 在不重写业务逻辑的前提下更换消息中间件
快速上手
- 1
安装 Watermill 库模块
go get github.com/ThreeDotsLabs/watermill - 2
按照官网 Quickstart 指南编写你的第一个应用
使用前须知
- 这是一个 Go 库,只适用于使用 Go 开发的应用。
- Kafka、RabbitMQ 等各个 Pub/Sub 后端位于独立模块中,需要你自行添加。
- 基准测试数据仅供粗略参考,很大程度上取决于具体环境配置。
标签
常见问题
- watermill 是什么?
- 一个 Go 语言库,用统一的发布/订阅接口构建事件驱动应用,支持 Kafka、RabbitMQ、NATS、SQL 等多种消息后端。 Watermill 是一个用于处理消息流的 Go 库,面向事件驱动应用,可用于事件溯源、CQRS、Saga 以及基于消息的 RPC 等场景。其核心抽象是一个接收消息并返回新消息或错误的处理函数,之后的行为由所选中间件决定。
- watermill 可以免费使用吗?用的什么许可证?
- watermill 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- watermill 还在维护吗?
- 半年内有更新。watermill 最近一次提交是在 2026年8月25日。
- watermill 适合用来做什么?
- 构建通过消息在组件之间通信的事件驱动服务 在 Go 中实现事件溯源或 CQRS 读模型 使用 Saga 协调长时间运行的业务流程 在不重写业务逻辑的前提下更换消息中间件
- watermill 怎么安装和运行?
- 安装 Watermill 库模块: go get github.com/ThreeDotsLabs/watermill 按照官网 Quickstart 指南编写你的第一个应用
- 在哪里获取 watermill?
- 源代码和安装说明在 GitHub 上:https://github.com/ThreeDotsLabs/watermill
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
本地优先的桌面客户端,用统一界面管理 RocketMQ、Kafka、RabbitMQ、Pulsar 等多种消息队列。
兼容 Kafka API 的流式数据平台,用 C++ 编写,无需 ZooKeeper 和 JVM。
在 Kubernetes 和 OpenShift 上运行与管理 Apache Kafka 集群的 Operator。
开源的用量计费、积分计费与混合计费基础设施,支持实时计量,可云端或自托管。
面向 Python 的分布式任务队列,用于在多个工作进程和消息代理之间执行后台任务与定时任务。