版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/51002444
NATS伺服器部署及測試
作者:chszs,未經部落客允許不得轉載。經許可的轉載需注明作者和部落格首頁: http://blog.csdn.net/chszs
NATS的伺服器是使用Golang語言開發的,其可執行檔案的名字為gnatsd,表示Go NATS Daemon。NATS伺服器是一個開源軟體,基于MIT許可證釋出。
NATS Server有Linux版、Mac版、Windows版。下面以Linux版為例,詳述其部署過程。
NATS Server目前的最新版本為0.7.2版,有三種二進制釋出包,詳見:
https://github.com/nats-io/gnatsd/releases/- gnatsd-v0.7.2-darwin-amd64.tar.gz for Mac的版本
- gnatsd-v0.7.2-linux-amd64.tar.gz for Linux x64的版本
- gnatsd-v0.7.2-linux-arm.tar.gz for Linux ARM的版本
雖然NATS Server是用Go語言開發的,但運作gnatsd無需安裝Golang環境。gnatsd非常的輕量級,釋出包隻有2MB多,啟動時可以無需任何參數,直接運作即可。
1、NATS Server的伺服器配置
gnatsd接受指令行參數作為控制手段。主要的伺服器參數如下。
1)伺服器選項
- -a, –addr HOST 綁定主機IP位址(預設是0.0.0.0)
- -p, –port PORT 用戶端連接配接NATS伺服器使用的端口(預設是4222)
- -P, –pid FILE 存儲PID的檔案
- -m, –http_port PORT 使用HTTP端口作為監聽端口
- -ms, –https_port PORT 使用HTTPS端口作為監聽端口
- -c, –config FILE 指定配置檔案
2)日志選項
- -l, –log FILE 指定日志輸出的檔案
- -T, –logtime 是否開啟日志的時間戳(預設為true)
- -s, –syslog 啟用syslog作為日志方法
- -r, –remote_syslog 遠端日志伺服器的位址(預設為udp://localhost:514)
- -D, –debug 開啟調試輸出
- -V, –trace 跟蹤原始的協定
- -DV 調試并跟蹤
3)授權認證選項
- –user user 連接配接需要的使用者名
- –pass password 連接配接需要的密碼
4)TLS安全選項
- –tls 啟用TLS,不驗證用戶端(預設為false)
- –tlscert FILE 伺服器證書檔案
- –tlskey FILE 伺服器證書私鑰
- –tlsverify 啟用TLS,每一個用戶端都要認證
- –tlscacert FILE 用戶端證書CA用于認證
5)叢集選項
- –routes [rurl-1, rurl-2] 路線征求并連接配接
6)正常選項
- -h, –help 顯示幫助消息
- -v, –version 顯示版本資訊
2、NATS Server部署
1)解壓
# tar zvxf /home/gnatsd-v0.7.2-linux-amd64.tar.gz
./
LICENSE
README.md
gnatsd
2)運作
# ./gnatsd
[10787] 2016/03/28 23:22:18.472500 [INF] Starting gnatsd version 0.7.2
[10787] 2016/03/28 23:22:18.472716 [INF] Listening for client connections on 0.0.0.0:4222
[10787] 2016/03/28 23:22:18.473127 [INF] gnatsd is ready
3)檢視運作
# ps -ef |grep gnatsd
root 10787 10296 0 23:22 pts/0 00:00:00 ./gnatsd
root 10795 10669 0 23:22 pts/2 00:00:00 grep --color=auto gnats
4)遠端登入
在遠端機器上(我的是win 8.1),執行Telnet登入:
C:\> telnet xxx.xxx.xxx.xxx 4222
連上後Telnet立刻輸出:
INFO {"server_id":"321233a60fd2a889a1a2f96bc1e95afe","version":"0.7.2","go":"go1.5.2","host":"0.0.0.0","port":4222,"auth
_required":false,"ssl_required":false,"tls_required":false,"tls_verify":false,"max_payload":1048576}
可見,gnatsd使用了Golang 1.5.2版開發。再次按下Enter鍵,Telnet斷開連接配接,顯示:
-ERR 'Unknown Protocol Operation'
-ERR 'Parser Error'
遺失對主機的連接配接。
同樣,gnatsd伺服器端也會輸出這樣的資訊:
[10787] 2016/03/28 23:31:47.050594 [ERR] xxx.xxx.xxx.xxx:58007 - cid:2 - Error reading from client: Client Parser ERROR, state=0, i=0: proto='"\r"...'
3、釋出/訂閱模式的驗證
使用兩個用戶端進行驗證。在遠端Windows主機上開兩個CMD指令行環境,均使用指令“C:> telnet xxx.xxx.xxx.xxx 4222”連上gnatsd伺服器。為了以示差別,這裡命名為用戶端A和用戶端B,A表示釋出者,B表示訂閱者。
1)訂閱者B運作
訂閱者B使用通配符foot.*注冊主題ID為90的主題,訂閱成功,gnatsd伺服器傳回+OK消息。
sub foo.* 90
+OK
2)釋出者A運作
釋出者A釋出一條消息到主題foo.bar,消息有效負載的長度為5,按下回車。消息釋出成功,gnatsd伺服器傳回+OK消息。
pub foo.bar 5
hello
+OK
3)訂閱者B顯示
sub foo.* 90
+OK
MSG foo.bar 90 5
hello
前兩行是之前的内容,後兩行是新獲得的推送消息。可見,釋出/訂閱的消息通信成功。
4)釋出者A繼續執行
釋出者A繼續執行以下指令,消息釋出成功,gnatsd伺服器傳回+OK消息。
pub foo.bar optional.reply.subject 5
hello
+OK
5)接收者B繼續顯示
MSG foo.bar 90 5
hello
PING
MSG foo.bar 90 optional.replay ly.subject 5
hello
後面三行都是新增的消息内容,其中PING是維持連接配接的消息。
6)接收者B執行
接收者B執行取消訂閱指令,指令消息發送成功,gnatsd伺服器傳回+OK消息。
unsub 90
+OK
7)釋出者A運作
釋出者A再次釋出一條消息到主題foo.bar,消息有效負載的長度為5,按下回車。消息釋出成功,gnatsd伺服器傳回+OK消息。
pub foo.bar 5
hell2
+OK
此時接收者B收不到消息,因為訂閱已經取消了。
用戶端發出心跳指令消息PING(用小寫ping也是同樣的),gnatsd伺服器傳回PONG消息。
ping
PONG
PING
PONG