nats介绍

一、背景:

最近的项目是关于cloud foundry,其中的消息组件是使用的nats,前期由于项目需求,说是nats不支持持久化,所以想替换掉cf的消息总线,使用rabbitmq,期间整改一个月,使接口适配nats和rabbitmq。这里先介绍nats

二、正文:

1、nats是一款基于EventMachine、使用“发布--订阅”机制的轻量级消息中间件。

nats有ruby和go等版本。

服务端源码地址:https://github.com/derekcollison/nats 

客户端源码地址:https://github.com/cloudfoundry/yagnats

2、NATS作为CF的神经网络,负责者组件之间的通讯和交互工作:

NATS基于Topic
发布者以Topic发送消息
订阅者订阅特定Topic并收到
这种策略下,发布者与订阅者不需要相互知道,只要按照订阅的主题进行发布,订阅者就能收到消息。
NATS的消息协议非常简单:所有的消息都由一个操作指令开头,然后各个参数以空格分开跟在操作指令之后。比如,NATS发布消息的一条完整指令为:PUB <TOPIC> <REPLY_TO><MSG_SIZE>,当服务器端收到这条指令之后它会转到“等待数据”的状态,并等待客户发出一条包含消息内容的指令:PUB <PAYLOAD>,然后服务器端收到客户端发来的消息内容:payload。这样publish的工作就完成了。同理,NATS订阅消息的过程也是类似的。我们在这里给出一次订阅和发布交互中TCP数据流的顺序图:

我们可以看到这次sub-pub的交互过程如下:

(1).   双方的连接成功建立之后(CONNECT操作成功得到响应之后),客户端首先订阅了主题为foo的消息,SID为1。

(2).   服务器端会记录下这主题和SID并响应+OK。

(3).   客户端发布了一个主题为foo的消息,长度为12,然后紧接着发来了消息数据“Hello World!”。

(4).   服务器端通过主题匹配找到该主题订阅者的SID是1,于是服务器端把这个消息的主题foo,SID值1,还有消息本身携带的数据“Hello World!”一起返回给客户端。

客户端根据SID =1从自己维护的订阅者列表里找到对应的订阅者,然后把服务器端返回来的数据交给订阅者去使用,一次对PUB操作的响应也就完成了。
NATS服务器端负责进行主题匹配的数据结构被称作Sublist,关于这部分数据结构的存储可以参考前面有关NATS原理的文章。

3、个人单独拜读go版本nats client源码的理解如下

nats接口说明

(1)NewClient()

说明:初始化

(2)Connect()

说明:连接nats server

(3)Publish()

说明:发布接口

(4)Subscribe()
说明:订阅接口

4、nats server源码

5、nats安装及实例

 

 

发布了35 篇原创文章 · 获赞 7 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章