1.安装
根据官方安装指引页面下载最新稳定版的二进制包
https://nsq.io/deployment/installing.html
wget https://s3.amazonaws.com/bitly-downloads/nsq/nsq-1.1.0.linux-amd64.go1.10.3.tar.gz
解压安装
tar zxvf nsq-1.1.0.linux-amd64.go1.10.3.tar.gz
mv nsq-1.1.0.linux-amd64.go1.10.3 /usr/local/
cd /usr/local/
做个软链, 最终 /usr/local/nsq 将作为使用目录
ln -s nsq-1.1.0.linux-amd64.go1.10.3 nsq
1.1启动进程
nsqlookupd
- nsqlookupd的主要职责是维护拓扑信息, 并且接受客户端请求发现指定topic的nsqd生产节点是哪些, 并返回给客户端;
- nsqd节点会广播话题和channel信息给nsqlookupd;
- nsqlookupd可以有多个
[root@localhost bin]# ./nsqlookupd
[nsqlookupd] 2018/08/29 10:24:57.331679 INFO: nsqlookupd v1.1.0 (built w/go1.10.3)
[nsqlookupd] 2018/08/29 10:24:57.332409 INFO: TCP: listening on [::]:4160
[nsqlookupd] 2018/08/29 10:24:57.332448 INFO: HTTP: listening on [::]:4161
监听的端口:
4160 TCP
用于接收nsqd
的广播
4161 HTTP
用于接收客户端发送的管理和发现操作请求(增删话题,节点等管理查看性操作等, 真正的生产与消费使用的是nsqd的4151端口)
nsqd
- nsqd 服务器多个才有集群的意义
- nsqd 才是真正服务生产者与消费者的进程
- nsqd 必须指定lookupd-tcp-address 上报自己的信息和状态
在生产环境请不要使用e2e-processing-latency*相关参数, 会消耗大量CPU资源
启动nsqd
[root@localhost bin]# ./nsqd --lookupd-tcp-address=192.168.1.211:4160 -broadcast-address 192.168.1.211 -data-path /data/nsq_data
参数说明:
--lookupd-tcp-address
指定nsqlookupd的ip和端口, 广播自身信息和状态给nsqlookupd
-broadcast-address
是用指定的地址与各个组件进行通信, 默认会使用主机名, 主机名不通时使用ip地址代替
-data-path
落地数据保存的地方
监听端口:
4150 TCP
4151 HTTP
nsqadmin
nsqadmin 提供WEB UI界面(看板)
启动nsqadmin
[root@localhost bin]# ./nsqadmin --lookupd-http-address=192.168.1.211:4161
参数:
--lookupd-http-address
指定从那个nsqlookupd服务读取信息
监听端口:
4171 HTTP
浏览器打开UI界面
http://x.x.x.x:4171
1.2测试
生产消息
curl -d 'hello world 12456' 'http://192.168.1.200:4151/pub?topic=test'
说明: 生产者是直接请求nsqd, 将消息入列的, 并不会经过nsqlookupd.
所以这里会存在一个问题, 当有多台nsqd的时候, 应该使用第三方负载均衡设备或服务进行自动负载与均衡.
topic无需事先创建, 直接指定即可, nsqd会自动创建这个topic
消费消息
nsq_tail --nsqd-tcp-address 192.168.1.200:4150 --topic test
nsq_tail --lookupd-http-address 192.168.1.211:4161 --topic test
说明: 消费时, 可以直接请求nsqd, 也可以请求nslookupd; 但建议请求nslookupd进行消费, 反对直接请求nsqd进行消费.
channel
一个topic可以在多个nsqd里存在, topic可以有channel, 也可由没有channel;
每个channel相当于是一个消息通道的副本. 比如同一个topic里面有A和B两个channel, 当A中的消息被消费后, B中的消息并未被消费.
当topic中存在channel时, 消费请求必须指定channel名称
nsq_tail --lookupd-http-address 192.168.1.211:4161 --topic test --channel name