共计 2897 个字符,预计需要花费 8 分钟才能阅读完成。
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 版开发。再次按下回车键,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
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-10/136416.htm