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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章