天天看點

NATS伺服器部署及測試NATS伺服器部署及測試

版權聲明:本文為部落客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
           

繼續閱讀