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安装及实例

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值