NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub。NSQ可用于大规模系统中的实时消息服务,而且天天可以处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。
NSQ具备分布式、去中心化的拓扑结构,该结构具备无单点故障、故障容错、高可用性以及可以保证消息的可靠传递的特征。NSQ很是容易配置和部署,且具备最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用Go和Python库。若是读者兴趣构建本身的客户端的话,还能够参考官方提供的协议规范。html
1. 建立主服务器(虚拟机)sql
IP: 192.168.0.210docker
2. 拉取NSQ镜像shell
> docker pull nsqio/nsq #拉取nsq镜像 > docker images #查看nsq镜像
3. 启动nsqlookupd服务浏览器
> docker run -d --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq:latest /nsqlookupd > #docker exec -ti lookupd /bin/sh #进入容器,查看nsq目录结构 > #docker rm -f `docker ps -qa` #删除全部容器
最重要的服务,是整个集群的总控室,包括服务发现和节点拓扑信息的管理。nsqlookupd有如下特色:服务器
- 惟一性,在集群中的节点只能指向惟一的nsqlookupd服务
- 去中心化,即便nsqlookupd崩溃,也会不影响正在运行的nsqd服务
- 充当nsqd和naqadmin信息交互的中间件
- 提供一个http查询服务,给客户端定时更新nsqd的地址目录
4. 启动nsqadmin管理系统架构
> docker run -d --name nsqadmin -p 4171:4171 nsqio/nsq /nsqadmin --lookupd-http-address=192.168.0.210:4161
nsqadmin能够部署在任何一个安装有nsq服务的机器上,只须要指定惟一的
lookupd-http-address
服务IP地址curl
浏览器打开:http://192.168.0.210:4171/ ,此时的NSQd Nodes
为空
tcp
1.在主服务器(192.168.0.210)上开启一个nsqd节点服务分布式
> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.210 --lookupd-tcp-address=192.168.0.210:4160
2.建立从服务器(IP:192.168.0.159),拉取镜像docker pull nsqio/nsq
,启动一个nsqd服务,此时已有两个nsqd节点
> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.159 --lookupd-tcp-address=192.168.0.210:4160
--broadcast-address
:当前服务器IP地址,--lookupd-tcp-address
:指向的lookupd服务器IP地址
1.打开任意一个shell终端,执行:
> curl -d 't1' 'http://192.168.0.210:4151/pub?topic=p1' #一个topic可屡次添加 > curl -d 't2' 'http://192.168.0.210:4151/pub?topic=p2'
> curl -d 't1' 'http://192.168.0.159:4151/pub?topic=q1' > curl -d 't2' 'http://192.168.0.159:4151/pub?topic=q2' > curl -d 't3' 'http://192.168.0.159:4151/pub?topic=q3'
2.nsqlookupd奔溃测试(在主服务器):
> docker stop lookupd #中止nsqlookupd服务 > curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic能够正常发布 > docker stop nsqd #中止nsqd服务 > curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic能够正常发布 #显式: curl: (7) Failed connect to 192.168.0.210:4151; 拒绝链接