一、背景:
最近的項目是關於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的神經網絡,負責者組件之間的通訊和交互工作:
這種策略下,發佈者與訂閱者不需要相互知道,只要按照訂閱的主題進行發佈,訂閱者就能收到消息。
我們可以看到這次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安裝及實例