NATS—协议详解(nats-protocol)
NATS的协议是⼀个简单的、基于⽂本的发布/订阅风格的协议。客户端连接到 gnatsd(NATS服务器),并与 gnatsd 进⾏通信,通信基于普通的 TCP/IP 套接字,并定义了很⼩的操作集,换⾏表⽰终⽌。与传统的、使⽤了⼆进制消息格式的消息通信系统不同,使⽤了基于⽂本的 NATS 协议,使得客户端实现很简单,可以⽅便地选择多种编程语⾔或脚本语⾔来实现。
NATS协议约定
主题名(Subject Name)
主题名包括响应主题(收件箱)名,是⼤⼩写敏感的,必须是⾮空字符串,不能包含空格,可以在字符串中使⽤ “.” 符号,⽐如:FOO、BAR、foo.bar、foo.BAR、FOO.BAR、FOO.BAR.BAZ 这些都是有效的主题名。
通配符
NATS⽀持在主题订阅中使⽤ “*” 通配符, 星号 “*” 匹配主题的任意级别的任意字符。注意:(⼀个*只能匹配⼀个级别)⽐如 foo.* 匹配 foo.a 但不匹配 foo.a.b,foo.*.*可以匹配 foo.a.b但不匹配foo.a.b.c
⼤于号 “>” 匹配后⾯的任意字符。⽐如 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 服务器指⽰协议错误,会导致客户端断开连接—————————————————————————————————————————————————————————————
注意:pub 操作只能针对具体的某个topic(收件箱),不能使⽤通配置符!
NATS协议消息的例⼦
下⾯是使⽤ Telnet 连接 demo.nats.io 站点的例⼦:
telnet demo.nats.io 4222
Trying 107.170.
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协议确认
不是tcpip协议包含的协议pedantic:打开附带的严格格式检查,⽐如正确的主题名
ssl_required:指⽰客户端是否需要SSL连接
auth_token:客户端授权令牌
user:连接的⽤户名(如果设置了auth_required)
pass:连接的密码(如果设置了auth_required)
name:客户端名(可选项)
lang:客户端的实现语⾔
version:客户端的版本
描述:
CONNECT消息与INFO消息相似,⼀旦客户端与NATS服务器建⽴了TCP/IP套接字连接,且服务器接收到INFO消息,客户端还可以发送CONNECT消息到NATS服务器,以便提供关于当前连接的更详细的信息和安全信息。
CONNECT {"verbose":false,"pedantic":false,"ssl_required":false,"name":"","lang":"go","version":"1.1.0"}\r\n
⼤多数客户端都设置了Verbose模式为false(缺省设置),这意味着服务器在接收到消息后不会发送+OK消息给客户端
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论