1、NATS安装前的普及

  NATS 的服务器是使用 GoLang 语言开发的,其可执行文件的名字为:gnatsd,表示:Go NATS Daemon。NATS服务器是一个开源软件,基于 MIT 许可证发布。

  NATS Server有 Linux版、Mac版、Windows版。下面以Linux版为例,详述其部署过程。

  NATS Server当前的最新版本为0.9.6版,有三种二进制发布包,详见:https://github.com/nats-io/gnatsd/releases/

  • gnatsd-v0.9.6-darwin-amd64.tar.gz  for Mac的版本
  • gnatsd-v0.9.6-linux-amd64.tar.gz   for Linux x64的版本
  • gnatsd-v0.9.6-linux-arm.tar.gz for        Linux ARM的版本

  虽然NATS Server是用Go语言开发的,但运行gnatsd无需安装Golang环境。gnatsd非常的轻量级,发布包只有2MB多,启动时可以无需任何参数,直接运行即可。

2、NATS Server的服务器配置

  gnatsd接受命令行参数作为控制手段。主要的服务器参数如下。

  1)服务器选项

    -a, --addr HOST     绑定主机IP地址(默认是0.0.0.0)

    -p, --port PORT      客户端连接NATS服务器使用的端口(默认是)

    -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             调试并跟踪

    gnatsd -DV -m 8222 -l nats.log  其中如果设置 -T false  那么日志文件中就不打印时间戳了,默认是true。

  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]   路线征求并连接

    --cluster [cluster url]    请求的路由集群地址

  6)常规选项

    -h, --help   显示帮助消息

    -v, --version    显示版本信息

    --help_tls  TLS相关帮助文档

3、NATS Server部署

  我们知道,NATS 底层是由 GoLang 语言开发的,故我们安装的时候也是采用 go 命令进行快速安装,具体在 Linux CentOS 如何安装 Go 可以参看我的另外一篇博客:

GO_01:Linux-CentOS之Go语言环境配置, 这里我就不重复写了。
 
1. 安装和运行
go get github.com/nats-io/gnatsd
gnatsd

  注意,如果有 Go 语言基础的或者是看了我的有关 Go 语言基础知识,就明白,通过 go get 获取到的源码都是存放到了 $GOPATH/src 路径下了,故一定要知道你的 GOPATH 配置的是什么。我们直接通过 gnatsd 启动后打印以下内容:

[] // ::17.795313 [INF] Starting nats-server version 0.9.
[] // ::17.795384 [INF] Listening for client connections on 0.0.0.0:
[] // ::17.795462 [INF] Server is ready

  如果看到以上结果,则证明我们的服务成功启动了。

2. 模拟远程登录

  在我自己笔记本(我的环境是mac pro),执行 telnet 命令进行登录:

$ telnet 192.168.113.129 4222   #其中 ip 需要输入你当前的服务器的 ip 地址

  脸上 telnet 后终端会打印以下信息:

INFO {"server_id":"lojv3evBKJzf6Qc7NXecI0","version":"0.9.6","go":"go1.8","host":"0.0.0.0","port":4222,
"auth_required":false,"ssl_required":false,"tls_required":false,"tls_verify":false,"max_payload":1048576}

  以上信息打印的就是你当前环境的有关配置,例如 gnats 的版本,go 使用的版本,当前ip地址以及 端口号等等。按一下回车键后,telnet 就会断开链接,显示如下信息:

-ERR 'Unknown Protocol Operation'
-ERR 'Parser Error'
Connection closed by foreign host.

  同理,gnatsd 服务端也会输出以下这样的信息:

[] // ::52.258761 [ERR] ::: - cid: - Error reading from client: Client Parser ERROR, state=, i=: proto='"\r"...'

3. 发布/订阅模式的验证

  使用两个客户端进行验证。在远程(自己的笔记本) 主机上开两个终端命令行环境,均使用命令 “$ telnet xxx.xxx.xxx.xxx 4222” 连上 gnatsd 服务器。为了以示区别,这里命名为客户端A 和 客户端B,A表示发布者,B表示订阅者。

 1. 首先运行订阅者B(先有订阅的发布才会有意义)

  订阅者B使用通配符 foot.* 注册主题 ID 为 90 的主题,订阅成功,gnatsd 服务器返回 +OK 消息。

sub foo.*
+OK

 2. 发布者A 运行

  发布者A发布一条消息到主题 foo.bar,消息有效负载的长度为 5,按下回车,输入长度在5范围内的内容。消息发布成功,gnatsd 服务器返回 +OK 消息。

pub foo.bar
hello
+OK

 3. 订阅者B 显示反馈

sub foo.* 90
+OK
MSG foo.bar
hello

  前两行是之前的内容,后两行是新获得的推送消息。可见,发布/订阅的消息通信成功。

 4. 发布者A 继续发布

  发布者A继续执行以下命令,消息发布成功,gnatsd服务器返回+OK消息。

pub foo.bar optional.reply.subject
hello
+OK

 5. 订阅者B 继续接收显示

MSG foo.bar 90 5
hello
PING
MSG foo.bar optional.replay.subject
hello

  后面三行都是新增的消息内容,其中PING是维持连接的消息。

 6. 订阅者B 执行

  订阅者B 执行取消订阅命令,命令消息发送成功,gnatsd 服务器返回 +OK 消息。

unsub
+OK

 7. 发布者A 执行

  发布者A再次发布一条消息到主题foo.bar,消息有效负载的长度为5,按下回车。消息发布成功,gnatsd服务器返回+OK消息。

pub foo.bar
hell2
+OK

  此时接收者B收不到消息,因为订阅已经取消了。 
  客户端发出心跳命令消息PING(用小写ping也是同样的),gnatsd 服务器返回 PONG 消息。

 4. 使用官方自带例子验证

 1. 进入官方例子文件夹

cd $GOPATH/src/github.com/nats-io/nats-io/go-nats/examples

 2. 运行订阅者B 程序订阅

go run nats-sub.go foo.bar

 3. 运行发布者A 发布消息

go run nats-pub.go foo.bar hello
go run nats-pub.go foo.bar "my name is liangyongxing"

 4. 订阅者B 屏幕会显示接收到的消息

[#1] Received on [foo.bar]: 'hello'
[#2] Received on [foo.bar]: 'Hello World'

 5. 中断订阅者B 的终端,使用正则匹配重新进行订阅

go run nats-sub.go foo.*

 6. 运行发布者A 发布多个主题的消息

$ go run nats-pub.go foo.bar "hello world"
Published [foo.bar] : 'hello world'
$ go run nats-pub.go foo.message "hello"
Published [foo.message] : 'hello'
$ go run nats-pub.go foo.message.2 "hello"
Published [foo.message.2] : 'hello'
$ go run nats-pub.go foo.message.test "hello 2"
Published [foo.message.test] : 'hello 2'
$ go run nats-pub.go foo.messages2 "hello 2"
Published [foo.messages2] : 'hello 2'

 7. 订阅者B 只接受到了3条信息并按序号显示出来

Listening on [foo.*]
[#1] Received on [foo.bar]: 'hello world'
[#2] Received on [foo.message]: 'hello'
[#3] Received on [foo.messages2]: 'hello 2'

  由以上结果可以看出,nats在识别主题最多为两级,第6步注册的主题:foo.message、foo.message.2 和 foo.message.test 在发送消息后后两个根本发送不到接收端,认为你注册的主题已经注册了,不能重复注册了,故接收端着两条数据是接收不到的。

  以上这些案例可以使用官方提供的一副图可以形象的说明:

  

下一章节主要针对队列模式使用总结 + 相关监控内容,情猛戳:NATS_06:队列验证与监控

NATS_05:NATS服务器部署的更多相关文章

  1. 分享阿里云推荐码 IC1L2A,购买服务器可以直接打9折,另附阿里云服务器部署ASP.NET MVC5关键教程

    阿里云推荐码为:IC1L2A 阿里云还是不错滴. 以windows server 2008 R2为例,介绍如何从全新的服务器部署MVC5 站点. 新购买的阿里云服务器是没有IIS的,要安装IIS: 控 ...

  2. HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)

    这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...

  3. ASP.NET生成WORD文档,服务器部署注意事项

    网上转的,留查备用,我服务器装的office2007所以修改的是Microsoft Office word97 - 2003 文档这一个. ASP.NET生成WORD文档服务器部署注意事项 1.Asp ...

  4. 同一服务器部署多个tomcat时的端口号修改详情

    同一服务器部署多个tomcat时,存在端口号冲突的问题,所以需要修改tomcat配置文件server.xml,以tomcat7为例. 首先了解下tomcat的几个主要端口: <Connector ...

  5. Linux平台下Lotus Domino服务器部署案例

    Linux平台下Lotus Domino服务器部署案例 几年前我写了篇<RHAS2.1下安装中文LotusDominoR6.5图解>这篇文档被多个大型网站转载,曾帮助过很多公司系统管理员部 ...

  6. 服务器部署_linuix下 一台nginx 多域名之二

    第二个需求: 1. 一台服务器部署了三个应用web1~web3对应三个域名:www.web1.com.www.web2.com.www.web3.com ,方法参照我另外一篇文章 2. 如果用非www ...

  7. MVC - 云服务器部署

    本章将和大家分享的是如果在云服务器上部署mvc,云服务器部署其实也不高大上,就和咋们在自己电脑上用iis发布部署站点一样,只是需要使用云解析把自己购买的域名解析到对应的自己的云服务器上,这些都是用的云 ...

  8. 阿里云服务器部署Office online注意事项

    阿里云服务器部署Office online注意事项 一.参考配置 实例规格:4核8GB(IO优化) 网络带宽:5Mbps 系统盘:40G 存储盘:200G OS:Windows Server 2016 ...

  9. 【北航软件工程】Alpha阶段前端页面编写及服务器部署

    前端页面编写 虽然之前对html语法有过一些了解,但是完全没有编写前端页面的经验,和我合作的czy大概也是这么个情况.在Alpha阶段的前端页面编写过程中,我们是摸着石头过河,html是个入门很快专精 ...

随机推荐

  1. 基于NABCD评论作业-王者荣耀交流协会PSP DAILY

    一.根据(不限于)NABCD评论作品的选题   N(Need,需求):在我知道PSP DAILY这款软件的时候,就认为这款软件对于学习软件工程课的学生来说有很大的需要.对于需求来说,软件工程课程中的学 ...

  2. 团队博客作业Week5 --- 团队贡献分--分配规则

    团队会议 时间:公元2015年10月26日22时3分20秒 地点:宿舍楼716房间 与会人员:陈谋,李剑锋,卢惠民,刘夕霆,仉伯龙,潘成鼎. 会议内容:今天的组会主要讨论的是项目团队贡献分的计算方式, ...

  3. 《Spring2之站立会议9》

    <Spring2之站立会议9> 昨天,添加了注册界面: 今天,添加了表情库: 遇到的问题:由于资源有限,感觉设计的不完美并且途中也遇到了好多问题.

  4. JAVA对象的初始化过程

    出处:http://blog.csdn.net/andrew323/article/details/4665379 下面我们通过两个例题来说明对象的实例化过程. 例1:   编译并运行该程序会有以下输 ...

  5. angularJS1笔记-(12)-自定义指令(compile/link)

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  6. angularJS1笔记-(9)-自定义指令(restrict/template/replace)

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  7. iOS- 本地文本容错搜索引擎2-->如何实现英文(英文首字母,汉语拼音)对中文的搜索?

      1.前言 先闲说几句,最近北京的雾霾真是大,呛的我这攻城师都抗不住了.各位攻城师们一定要爱护好自己的身体!空气好时,少坐多动. 如果条件好的话,最好让你们BOSS搞个室内空气净化器.因为那几天一般 ...

  8. Scrum 6.0

    sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果得到认可,会感觉很好. 其他人可以了解你的团队在做些什么,并得到重要反馈. 演示是一种社会活动,不同的团队可以在这里相互交流,讨论 ...

  9. 课堂alpha发布

    项目组名:奋斗吧兄弟 今天七组对于各自项目现有的成果进行了alpha发布,下面是我的一些感想. 天天向上团队的连连看游戏: 令我印象最深的是天天向上团队的连连看项目,他们目前能展示给我们的是核心的连连 ...

  10. testNg-build.xml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <proje ...