Watermill:用于高效处理消息流的golang库,支持RPC

Watermill 是一个 Go 库,用于高效处理消息流。它旨在 用于构建事件驱动的应用程序,启用事件溯源,通过消息进行 RPC, 支持sagas(一种在分布式系统中处理事务的协议) 以及基本上您想到的其他任何东西。您可以使用传统的发布/订阅 像Kafka或RabbitMQ这样的实现,但如果适合你的用例,也可以使用HTTP或MySQL二进制日志。

目标

开始

选择你最喜欢的或按顺序看:

  1. 按照入门指南进行操作。
  2. 请参阅以下示例。
  3. 阅读完整文档:https://watermill.io/

例子

背景

构建分布式和可扩展的服务很少像某些人建议的那样容易。有一个 编写此类系统带来的许多隐藏知识。就像你不需要知道 整个TCP堆栈来创建HTTP REST服务器,您不需要研究所有这些知识 从构建消息驱动的应用程序开始。

Watermill的目标是使与消息的通信像HTTP路由器一样易于使用。它提供 开始使用事件驱动架构所需的工具,并允许您了解详细信息 忙得不可开交。

在水车的核心有一个简单的界面:

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

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

您可以在我们的介绍水车博客文章中找到有关我们动机的更多信息。

发布/订阅

所有发布者和订阅者都必须实现一个接口:

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
}

支持的发布/订阅:

所有发布/订阅实现文档都可以在文档中找到。

非官方库

找不到您喜欢的发布/订阅或库集成?检查真棒水车

如果您知道另一个库或是一个图书馆的作者,请将其添加到列表中

贡献

请查看 Watermill 的贡献指南

稳定性

Watermill v1.0.0 已发布,可用于生产。公共 API 是稳定的,如果不更改主要版本,就不会更改。

为了确保所有 Pub/Sub 在生产中稳定且安全使用,我们创建了一组测试,在合并到 master 之前,每个实现都需要通过这些测试。 所有测试也在压力模式下执行 - 这意味着我们将并行运行所有测试20倍

所有测试都在启用争用条件检测器的情况下运行(测试中的标志)。-race

有关调试测试的详细信息,应查看测试故障排除指南

基准测试结果

用于对 Pub/Subs 进行基准测试的初始工具可以在水车基准测试中找到。

所有基准测试都在单个 16 CPU VM 实例上完成,在 Docker Compose 中运行一个二进制文件和依赖项。

这些数字旨在粗略估计不同发布/订阅消息处理速度。 请记住,结果可能会有很大不同,具体取决于设置和配置(低得多和更高)。

下面是消息大小为 16 字节的简短版本。

发布/订阅发布(消息/秒)订阅(消息/秒)
卡夫卡(单节点)63,506110,811
卡夫卡(5 节点)70,252117,529
纳特斯76,20838,169
SQL (MySQL)7,299154
SQL (PostgreSQL)4,14298
谷歌云发布/订阅7,41639,591
阿姆克普2,40810,608
去频道272,938101,371

支持

如果您在文档中没有找到问题的答案,请随时直接询问我们!

请加入Watermill 的Discord 频道  Three Dots Labs Discord。 频道号 #watermill

每一点反馈都非常欢迎和赞赏。请使用调查提交

为什么叫这个名字?

它处理流!

许可证

MIT

版权声明:本文《Watermill:用于高效处理消息流的golang库,支持RPC》为「linux名库」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。联系方式osschina@qq.com
 
Leave a Reply 0

Your email address will not be published. Required fields are marked *


加好友请备注:linuxlibs
您可以在微信公众号联系我们
您可以通过邮件联系我们
我们将24小时内回复。
取消