NATS_04:NATS協議詳解


  NATS的協議是一個簡單的、基於文本的發布/訂閱風格的協議。客戶端連接到 gnatsd(NATS服務器),並與 gnatsd 進行通信,通信基於普通的 TCP/IP 套接字,並定義了很小的操作集,換行表示終止。與傳統的、使用了二進制消息格式的消息通信系統不同,使用了基於文本的 NATS 協議,使得客戶端實現很簡單,可以方便地選擇多種編程語言或腳本語言來實現。

 NATS協議約定

  • 主題名(Subject Name) 
    主題名包括響應主題(收件箱)名,是大小寫敏感的,必須是非空字符串,不能包含空格,可以在字符串中使用 “.” 符號,比如: 
    FOO、BAR、foo.bar、foo.BAR、FOO.BAR、FOO.BAR.BAZ 這些都是有效的主題名。
  • 通配符 
    NATS支持在主題訂閱中使用 “*” 通配符, 星號 “*” 匹配主題的任意級別的任意字符。 
    大於號 “>” 匹配后面的任意字符。比如 foo.> 匹配 foo.bar 和 foo.bar.baz.1,但不匹配 foo 
    通配符必須被標識分隔。比如 foo.bar 和 foo.> 都是有效的,而 foo..bar、f*o.b*r 和 foo> 都是無效的。
  • 域分隔符 
    NATS協議消息的域使用 空格符 或 \t 進行分隔。多個空格會被視為一個空格。
  • 新行 
    與那些基於文本的協議一樣,NATS使用 CR+LF(也即\r\n,0X0D0A)作為協議消息的終止。新行還用於標記在 PUB 或 MSG 協議消息的實際有效負載。

 NATS協議消息

  下面的表格描述了NATS協議消息,要注意操作名是大小寫不敏感的,因此 SUB foo 1\r\n 和 sub foo 1\r\n 是等價的。

—————————————————————————————————————————————————————————————
 操作名   |    發送端    |               描述
—————————————————————————————————————————————————————————————
INFO         服務器       初始化TCP/IP連接后發送給客戶端
CONNECT      客戶端       發送給服務器指定連接信息
PUB          客戶端       發布消息到主題或Reply主題
SUB          客戶端       訂閱主題(或主題通配符)
UNSUB        客戶端       取消訂閱主題(或自動取消訂閱)
MSG          服務器       交付一條消息負載給訂閱者
PING         兩端         保持連接有效的PING活躍消息
PONG         兩端         保持連接有效的PONG活躍消息
+OK          服務器       確認詳細(Verbose)模式下協議消息的合法
-ERR         服務器       指示協議錯誤,會導致客戶端斷開連接
—————————————————————————————————————————————————————————————

 NATS協議消息的例子

  下面是使用 Telnet 連接 demo.nats.io 站點的例子:

telnet demo.nats.io 4222

Trying 107.170.221.32...
Connected to demo.nats.io.
Escape character is '^]'.
INFO {"server_id":"1ec445b504f4edfb4cf7927c707dd717","version":"0.6.6","go":"go1.4.2","host":"0.0.0.0","port":4222,"

 CONNECT

  語法 CONNECT {[“option_name”:option_value],…} 有效的選項如下:

  • verbose打開+OK協議確認
  • pedantic:打開附帶的嚴格格式檢查,比如正確的主題名
  • ssl_required:指示客戶端是否需要SSL連接
  • auth_token:客戶端授權令牌
  • user:連接的用戶名(如果設置了auth_required)
  • pass:連接的密碼(如果設置了auth_required)
  • name:客戶端名(可選項)
  • lang:客戶端的實現語言
  • version:客戶端的版本

描述: 
  CONNECT消息與INFO消息相似,一旦客戶端與NATS服務器建立了TCP/IP套接字連接,且服務器接收到INFO消息,客戶端還可以發送CONNECT消息到NATS服務器,以便提供關於當前連接的更詳細的信息和安全信息。

例子:下面是來自Golang客戶端的一個例子:

CONNECT {"verbose":false,"pedantic":false,"ssl_required":false,"name":"","lang":"go","version":"1.1.0"}\r\n

  大多數客戶端都設置了Verbose模式為false(缺省設置),這意味着服務器在接收到消息后不會發送+OK消息給客戶端。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM