watermill:构建事件驱动的Go库


Watermill 是一个用于高效处理消息流的 Go 库。它旨在构建事件驱动的应用程序、启用事件溯源、基于消息的 RPC、sagas 以及基本上你想到的任何其他东西。您可以使用传统的 pub/sub 实现,如 Kafka 或 RabbitMQ,但如果适合您的用例,也可以使用 HTTP 或 MySQL binlog。

构建分布式和可扩展的服务很少像某些人建议的那样容易。编写这样的系统有很多隐藏的知识。就像您无需了解整个 TCP 堆栈即可创建 HTTP REST 服务器一样,您无需学习所有这些知识即可开始构建消息驱动的应用程序。
Watermill 的目标是使与消息的通信像 HTTP 路由器一样易于使用。它提供了开始使用事件驱动架构所需的工具,并允许您随时随地了解详细信息。

Watermill 的核心是一个简单的接口:

func(*Message) ([]*Message, error)

您的处理程序收到一条消息并决定是发布新消息还是返回错误。接下来发生的事情取决于您选择的中间件。

支持pub/sub:
所有发布者和订阅者都必须实现一个接口:

type Publisher interface {
    Publish(topic string, messages ...*Message) error
    Close() error
}

type Subscriber interface {
    Subscribe(ctx context.Context, topic string) (<-chan *Message, error)
    Close() error
}


Pub/Subs:


这是Go语言世界中的 apache camel:Camel 在支持的消息模式和技术方面更加复杂。