处理消息流的Go库Watermill,构建事件驱动应用,使用pub/sub实现

Watermill是一个高效处理消息流的Go语言库,旨在构建事件驱动应用、启用事件溯源、基于消息的远程过程调用RPC、sagas以及基本上你能想到的任何其他东西。

你可以使用Kafka或RabbitMQ等传统pub/sub实现,也能够使用适合自己用例的HTTP或MySQL binlog(二进制日志)。

处理消息流的Go库Watermill,构建事件驱动应用,使用pub/sub实现

  • 项目地址:https://github.com/ThreeDotsLabs/watermill
  • 开源协议:MIT license

Watermill带有一组Pub/Sub实现,因而可以轻松地扩展。此外,它还附带插桩(instrumentation)、病毒消息阵列、节流、关联等标准中间件,以及每个消息驱动应用所使用的其他工具。

该项目已经在GitHub上积累了4.2k的Star。

目标

  • 容易理解。
  • 通用——事件驱动架构、消息传递、流处理和CQRS,随心所欲地使用。
  • 快速
  • 灵活的中间件、插件和Pub/Sub配置。
  • 弹性——使用经过验证的技术并通过压力测试。

背景

构建分布式和可扩展服务很少像人们建议的那样容易。编写这类系统需要大量隐藏知识。就像你不需要了解整个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如下:

  • AMQP Pub/Sub
  • Bolt Pub/Sub
  • Firestore Pub/Sub
  • Google Cloud Pub/Sub
  • HTTP Pub/Sub
  • io.Reader/io.Writer Pub/Sub
  • Kafka Pub/Sub
  • NATS Pub/Sub
  • SQL Pub/Sub

更多细节内容请参阅原项目。

消息   事件   Go
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章