NATS之gnatcd初體驗(yàn)

現(xiàn)在Message Queue有多種選擇仁堪,比如Java的Kafaka/ActiveMQ阶捆、Erlang的RabbitMQ倦卖、Golang的NSQ以及這里要說的gnatcd。

1. NATS與gnatcd

NATS is Open Source. Performant. Simple. Scalable.A central nervous system for modern, reliable and scalable cloud and distributed systems.
--http://nats.io/

按照其官網(wǎng)的說法粥航,NATS是一個(gè)開源的、高性能的、簡(jiǎn)潔的焕盟、靈活的 適用于現(xiàn)代的可靠靈活的云和分布式系統(tǒng)的中樞系統(tǒng)。 說的很玄乎娱挨,實(shí)際上就是一個(gè)分布式
的消息隊(duì)列系統(tǒng)邦危,支持PubSub/ReqRsp 模型。其最初由Apcera領(lǐng)導(dǎo)開發(fā)毡熏,并實(shí)現(xiàn)了Ruby版本的服務(wù)器和客戶端坦敌,其主要作者Derek Collison自稱做了20多年的MQ,并經(jīng)歷過TIBOC、Rendezvous狱窘、EMC公司杜顺,這里有他自己的reddit回答

根據(jù)github里面ruby-nats的日志顯示在11年Derek實(shí)現(xiàn)了Ruby版本
的NATS服務(wù)器以及對(duì)應(yīng)的客戶端蘸炸。然后在12年末躬络,Derek又用Golang將服務(wù)器重寫了一遍,并最終發(fā)現(xiàn)其效果更好搭儒,于是現(xiàn)在慢慢將Ruby版本的服務(wù)器淘汰了穷当,現(xiàn)在
官網(wǎng)也只維護(hù)一個(gè)Golang版本的服務(wù)器,也就是我們這里的gnatcd淹禾。

NATS provides a lightweight server that is written in the Go programming language. Apcera actively maintains and supports the NATS server source code, binary distributions, and Docker image.
-- http://nats.io/documentation/

gnatcd根據(jù)NATS說法馁菜,會(huì)由Apcera維護(hù),并提供源碼铃岔、二進(jìn)制文件以及Docker鏡像文件汪疮。

2. NATS組成以及支持的內(nèi)容

NATS主要由Golang寫的服務(wù)器“gnatsd”和一系列的客戶端SDK組成,客戶端有官方維護(hù)Golang毁习、Node.js智嚷、RubyJava蜓洪、C纤勒、C#以及Nginx C版本,除此之外還有社區(qū)貢獻(xiàn)的Spring隆檀、Lua摇天、PHPPython恐仑、Scala泉坐、Haskell版本,基本覆蓋了主流語言裳仆。

客戶端和服務(wù)器之間通過一套本文協(xié)議進(jìn)行通訊(想想Redis也是文本協(xié)議)腕让,因此可以和Redis一樣可以通過Telnet進(jìn)行調(diào)試,也因此只要按照文檔中的描述歧斟,來
實(shí)現(xiàn)一套客戶端(想想Redis那么多的客戶端)纯丸。

具體的協(xié)議羅列在官方手冊(cè)中,主要分成:

操作命令 由誰發(fā)送 描述
INFO Server 當(dāng)TCP握手完成后,由服務(wù)器發(fā)給客戶端
CONNECT Client 由客戶端發(fā)送給服務(wù)器静袖,帶上連接的必要信息
PUB Client 客戶端發(fā)送一個(gè)發(fā)布消息給服務(wù)器
SUB Client 客戶端向服務(wù)器訂閱一條消息
UNSUB Client 客戶端向服務(wù)器取消之前的訂閱
MSG Server 服務(wù)器發(fā)送訂閱的內(nèi)容給客戶端
PING Both PING keep-alive 消息
PONG Both PONG keep-alive 響應(yīng)
+OK Server 在verbose模式下觉鼻,確認(rèn)正確的協(xié)議格式
-ERR Server 表示協(xié)議錯(cuò)誤,將端口連接

NATS實(shí)現(xiàn)了三種模式

  • Publish Subscribe
  • Request Reply
  • Queueing

也就是MessageQueue常見的“發(fā)布訂閱模式”队橙、“請(qǐng)求響應(yīng)模式”以及“消息隊(duì)列模式”坠陈。

3. gnatcd安裝與使用

了解了NATS后萨惑,我們來看怎么進(jìn)行簡(jiǎn)單的使用。gnatcd是用Golang寫的仇矾,因此可以很方便的用go get github.com/nats-io/gnatsd進(jìn)行安裝庸蔼。如果沒有Golang環(huán)境,也可以在下載界面下載MacOS/Linux二進(jìn)制文件贮匕,甚至Docker鏡像姐仅。客戶端SDK也可以在這里找到下載粗合。

在用"go get”安裝的時(shí)候萍嬉,需要注意的是,gnatcd依賴“golang.org/x/crypto/bcrypt”隙疚,但是這個(gè)地址已經(jīng)被移動(dòng)到Github上了壤追,所以上面的地址"get"不
到源碼,所以需要在你的$GOPATH/golang.org/x目錄下git拖一下crypto的新代碼:https://github.com/golang/crypto.git

mkdir -p $GOPATH/golang.org/x
cd $GOPATH/golang.org/x
git clone https://github.com/golang/crypto.git

然后到get到的gnastd目錄下供屉,執(zhí)行build或者install進(jìn)行編譯:

cd $GOPATH/github.com/nats-io/gnatsd 
go build 
go install

然后根據(jù)build/install的方始行冰,執(zhí)行g(shù)natsd命令,會(huì)看到

$./gnatsd
[20783] 2016/04/23 23:14:22.850373 [INF] Starting nats-server version 0.8.0.beta
[20783] 2016/04/23 23:14:22.850469 [INF] Listening for client connections on 0.0.0.0:4222
[20783] 2016/04/23 23:14:22.850585 [INF] Server is ready

這樣服務(wù)器就正常運(yùn)行了伶丐。

下面在開兩個(gè)終端悼做,我們用Golang的客戶端nats(https://github.com/nats-io/nats.git)來做個(gè)pub-sub的例子。首先go get github.com/nats-io/nats 進(jìn)行安裝哗魂。

然后分別建立兩個(gè)目錄:

mkdir pub sub 

接著分別將https://github.com/nats-io/examples/nats-pub.go復(fù)制到pub目錄肛走,https://github.com/nats-io/examples/nats-sub.go復(fù)制到sub目錄。然后修改這兩個(gè)文件录别,將最開始的:

// +build ignore

刪除后朽色,分別在兩個(gè)目錄下執(zhí)行

go build

現(xiàn)在客戶端就建立好了,這個(gè)時(shí)候先在sub目錄下訂閱一條消息:

./sub  -s nats://localhost:4222 -t abc
Listening on [abc]

然后再在pub下面進(jìn)行發(fā)布:

$./pub  -s nats://localhost:4222 abc msg_abc
Published [abc] : 'msg_abc'

此時(shí)组题,回望sub那邊:

2016/04/24 14:27:53 [#1] Received on [abc]: 'msg_abc'

這樣也就完成了一次消息的發(fā)布和訂閱了葫男。

4. bechmark

NATS作為一個(gè)既老(2012年就有Ruby版本)又新(2013年的Golang版本)的MessageQueue,和其他同類產(chǎn)品(Kafaka/ActiveMQ/NSQ/RabbitMQ)又有什么優(yōu)勢(shì)呢崔列?來看兩個(gè)benchmar梢褐,第一個(gè)是官方的benchmark

另一個(gè)是bravenewgeek做的一個(gè)Golang MQ對(duì)比,結(jié)果如下:

bravenewgeek

另外他還做了一個(gè)和其他產(chǎn)品之間的對(duì)比,結(jié)果如下:

bravenewgeek2

總的來說gnats的性能還是毋庸置疑的,主要可能還是要看他的使用場(chǎng)景赵讯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盈咳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子边翼,更是在濱河造成了極大的恐慌鱼响,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讯私,死亡現(xiàn)場(chǎng)離奇詭異热押,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斤寇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門桶癣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娘锁,你說我怎么就攤上這事牙寞。” “怎么了莫秆?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵间雀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我镊屎,道長(zhǎng)惹挟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任缝驳,我火速辦了婚禮连锯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘用狱。我一直安慰自己运怖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布夏伊。 她就那樣靜靜地躺著摇展,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溺忧。 梳的紋絲不亂的頭發(fā)上咏连,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音砸狞,去河邊找鬼捻勉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刀森,可吹牛的內(nèi)容都是我干的踱启。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼研底,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼埠偿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起榜晦,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤冠蒋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乾胶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抖剿,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朽寞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斩郎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脑融。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缩宜,靈堂內(nèi)的尸體忽然破棺而出肘迎,到底是詐尸還是另有隱情,我是刑警寧澤锻煌,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布妓布,位于F島的核電站,受9級(jí)特大地震影響宋梧,放射性物質(zhì)發(fā)生泄漏匣沼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一乃秀、第九天 我趴在偏房一處隱蔽的房頂上張望肛著。 院中可真熱鬧,春花似錦跺讯、人聲如沸枢贿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽局荚。三九已至,卻和暖如春愈污,著一層夾襖步出監(jiān)牢的瞬間耀态,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工暂雹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留首装,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓杭跪,卻偏偏與公主長(zhǎng)得像仙逻,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涧尿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容