作者:Chaitanya Munukutla
记得是在 2015 年初,我第一次听到消息经纪人这个词。我正在攻读硕士学位,关于 P2P 网络,需要模拟稳定吞吐量的传入消息。那时我不是一个极客,所以解决方法是做一个无限的 Thread.sleep() 循环。不要不满,那时我才 21 岁。
RabbitMQ 是我与消息传递系统的第一次约会。我对这类关系很陌生,并没有太多可比性,所以 RabbitMQ 似乎很好。但是,自己托管它有点痛苦,而且我也厌倦了 Java。那是我找到 PubNub 的时候,上帝是美丽的。我不需要处理任何事情,几乎所有你使用的环境都有驱动。并且,他们有一个免费等级可用,这是我透露我来自印度的时候,我们比任何人都更好地使用免费资源。
免责声明:我没有试图去找 NATS,这是一个意外。
我看到了这个新的基金会,云原生计算基金会,它似乎是街头新的嘻哈孩子,所以我前往 cncf.io,看看他们是否有他们吹嘘的东西。然后,我遇到这个名为 NATS 的新孵化项目。他们称之为“为微服务而设的消息传递”。它有类似于 RabbitMQ、ActiveMQ、Pubnub 等的消息代理抽象。那么我为什么要切换?
为何选择 NATS?
惯用法。我一直在寻找令人兴奋的新语言,这些语言似乎无处不在。我试过 Golang、Swift、Kotlin、Python、C# 和 Erlang(是的,我说过是真的)。新语言似乎带来了他们各自对编程的惯用方式。NATS 似乎通过简单直接的驱动程序,带来了原生方式。NATS 帮助我学习 Golang 频道、RxJava 和 Erlang 主管模型。
强大功能。NATS 功能强大。它优雅地处理 pub-sub、请求 - 响应、排队和流媒体,甚至可以同时处理!
简单部署。我不能夸大这一点,NATS 很容易部署和管理。只需在我的终端上运行./gnatsd 即可!
极其省资源。我已经对 NATS 进行了基准测试,它从未占用超过 150MB 的 RAM 来为单个主机上的 100 万有效负载流入提供服务。仅供参考,单个谷歌 Chrome 浏览器所需更高。
惊人的表现。如果你到目前为止还没有使用 NATS,请停止阅读并下载最新的二进制文件并尝试一下。试用 PC 可承受的最大负载,NATS 让你满意。对于 NATS 的用户,你知道我在说什么。
那么为什么我会在所有语言中,以 Dart 为 NATS 编写驱动程序?
tl;dr – 必要是发明的母亲。
实际原因也简单。我正在编写一个带有无服务器触发器的 Flutter 应用程序,NATS 似乎没有 Dart 驱动程序。所以我写了!!
过程直截了当吗?是,是的。NATS 有非常直观的基于文本的协议。所以,我所要做的是打开 TCP 套接字,并开始发送字节流:)
棘手的部分?好吧,集群。虽然我没有浏览其他驱动程序,当一个群集的主机出现故障时,将订阅从一个主机移植到另一个主机有点棘手。但 Dart 拥有 Future 和 Stream 类的最佳流式抽象,所以,一旦掌握了它,就变得轻松。
为什么选择 Dart?我个人认为 Dart 将在未来 3 - 5 年内成为编程语言的超人。谷歌正在大力投注 Flutter;Dart 现在可用共享代码库开发服务器、iOS、Android、MacOS、Linux 和 Windows 应用程序;Flutter 团队现在通过 Hummingbird 项目将 Flutter 带到网上。我猜谷歌不会让我失望。
总结
在短时间内,你将无法在消息传递领域中找到像 NATS 这样棒的东西。它强调云原生操作、群集和闪电般快速的消息传递,这简直令人兴奋。因此,我建议大家使用你选择的语言来尝试一下。
任何 Dart/Flutter 的开发者,请在 Github 上查看 nats-dart,并告诉我是否合适。