1、brew安装nsq
brew install nsq


2、在命令行窗口1启动 nsqlookupd 服务
nsqlookupd
可以看到,nsqlookupd启动之后,监听TCP 4160端口,用于管理nsqd服务;监听HTTP 4161端口,用于给nsqadmin提供服务。

3、在命令行窗口2启动nsqd服务
nsqd --lookupd-tcp-address=127.0.0.1:4160 --broadcast-address=127.0.0.1
特别注意:后面的 --broadcast-address=127.0.0.1 一定要加上,表明广播地址,否则客户端连接时,无法连接获取主题中的消息,报错如下
error connecting to nsqd - dial tcp: i/o timeout
(1)再新建一个CMD窗口2,需指定要连接的nsqlookupd的地址和端口,这里我们就连接上一步已经启动的nsqlookupd,地址即127.0.0.1:4160
nsqd连接成功nsqlookupd后,会初始化topic、channal的元数据,获取nsqlookupd信息。

(2)与此同时,nsqlookupd的窗口1输出:
表明新建一个客户端连接:new client(127.0.0.1:52051)

(3)之后nsqd每隔15s向nsqlookupd发送一个心跳包,表明nsqd处于在线状态,而nsqlookupd回复pinged。
nsqd的窗口2发送心跳包

nsqlookupd的窗口1接收到心跳包并反馈

4、生产消息:往nsqd发布一条初始化消息
新建一个CMD窗口3发布消息方法pub,消息主题为test,消息内容为"hello world"
curl -d 'hello world' 'http://127.0.0.1:4151/pub?topic=test'

此时nsqd窗口2输出表明新注册一个主题test:

而nsqlookupd窗口1输出:

此时并没有任何通道channels来连接该主题topic,只是生产了消息,存在topic本身内部。
注意:nsqd对于http请求监控的就是4151端口,因此生产消息往4151端口发送消息

5、新建channal来消费消息
在/tmp文件夹下新建一个nsq_log的文件夹,绝对路径为:/tmp/nsq_log
(1)新建一个CMD窗口4:
nsq_to_file --topic=test --output-dir=/tmp/nsq_log --lookupd-http-address=127.0.0.1:4161

上图表明我们用到nsq_to_file来消费topic为test的消息内容,并将其输出到指定路径(--output-dir=/tmp/nsq_log),监控的地址为本地127.0.0.1:4161
注意:
如果nsqd启动时nsqd --lookupd-tcp-address=127.0.0.1:4160 --broadcast-address=127.0.0.1,后面不加广播地址为本地,那么这里就会报错
无法连接到nsqd

6、在新的窗口查看消费数据
(1)之后每小时会自动生成一个文件
test.QKBJ100574deMacBook-Pro.2020-04-30_10.log
表明是2020-04-30号10点生成的日志文件

然后,所有往topic为test的主题中发送消息时,这里就会同步获取到该消息
7、可视化界面管理
(1)启动nsqadmin,新建一个CMD窗口5:
nsqadmin --lookupd-http-address=127.0.0.1:4161

此时,该客户端连接的是127.0.0.1:4161端口的数据,监听127.0.0.1:4171端口并展示数据,那么我们就可以在浏览器查看127.0.0.1:4171端口即可
(2)浏览器查看 http://127.0.0.1:4171/
此时能看到我们刚刚创建的topic:test

创建一个新的topic:xueyanxiang
curl -d 'hello sucess' 'http://127.0.0.1:4151/pub?topic=xueyanxiang'

网友评论