Watermill是一个高效处理消息流的Go语言库,旨在构建事件驱动应用、启用事件溯源、基于消息的远程过程调用RPC、sagas以及基本上你能想到的任何其他东西。
你可以使用Kafka或RabbitMQ等传统pub/sub实现,也能够使用适合自己用例的HTTP或MySQL binlog(二进制日志)。
Watermill带有一组Pub/Sub实现,因而可以轻松地扩展。此外,它还附带插桩(instrumentation)、病毒消息阵列、节流、关联等标准中间件,以及每个消息驱动应用所使用的其他工具。
该项目已经在GitHub上积累了4.2k的Star。
目标
背景
构建分布式和可扩展服务很少像人们建议的那样容易。编写这类系统需要大量隐藏知识。就像你不需要了解整个TCP堆栈就能创建HTTP REST服务器一样,开始构建消息驱动的应用也不应该让你学习所有这些知识。
Watermill的目标是使得消息通信像HTTP路由一样易于使用,它提供了开始构建事件驱动架构所需要的工具,并允许你随时随地了解细节。
Watermill的核心是一个简单的界面:
func(*Message) ([]*Message, error)你的处理程序接收到一个消息,并决定是否发布新消息或者返回错误。接下来发生什么取决于你选择的中间件。
安装
go get -u github.com/ThreeDotsLabs/watermill示例
Pubs/Subs
所有发布器和订阅器必须执行如下界面:
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如下:
更多细节内容请参阅原项目。
| 留言与评论(共有 0 条评论) “” |