Repolode
ThreeDotsLabs

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. 1

    安装 Watermill 库模块

    go get github.com/ThreeDotsLabs/watermill
  2. 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 数据每日更新。

相关项目