Golang消息队列:NSQ简单介绍与使用
1.服务启动:
windows:
1.在window的环境变量中path加入:
e:\nsq-1.0.0-compat.windows-amd64.go1.8\bin
2.打开命令窗口,运行:
nsqlookupd
3.打开新的命令窗口,运行:
nsqd --broadcast-address=127.0.0.1 --mem-queue-size=0 --lookupd-tcp-address=127.0.0.1:4160
4160是nsqd与lookupd进行tcp连接的端口;
-broadcast-address=127.0.0.1防止地址被解析私有ip;
-mem-queue-size=0是消息持久化到磁盘;
4.打开新的命令窗口,运行:
nsqadmin --lookupd-http-address=127.0.0.1:4161
4161是nsqadmin与lookupd进行http连接的端口;
5.打开支持curl命令的窗口(git bash)运行:
curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'
4151是nsqd http请求的接口;
6.至此,整个运行和产生消息的过程就完成了,打开:
http://127.0.0.1:4171/
即可看到对应的可视化页面,看到自己的消息队列;
7.打开新的命令窗口,运行:
nsq_to_file --topic=test --output-dir=e:/nsq-logs --lookupd-http-address=127.0.0.1:4161
消费消息,打印到日志文件;
linux:
步骤和windows类似;
后台启动,命令加上:nohup ./*** & 即可;
2.端口介绍:
1.外网访问必须开放4150,4151,4160,4161,4171等几个端口;
2.nsqlookupd 监听两个端口:
4160 tcp 用于接收nsqd的广播,记录nsqd的地址以及监听tcp/http端口等;
4161 http 用于接收客户端发送的管理和发现操作请求,增删话题,节点等管理查看性操作等;
当consumer进行连接时,返回对应存在topic的nsqd列表;
3.nsqd监听两个端口:
4151 http producer使用http协议的curl等工具生产数据;consumer使用http协议的curl等工具消费数据;
4150 tcp producer使用tcp协议的nsq-j等工具生产数据;consumer使用tcp协议的nsq-j等工具消费数据;
4.nsqadmin监听一个端口:
4171 http 用于管理页面;
5.使用地址http://127.0.0.1:4171打开管理页面;
注:官方推荐使用http方式生产消费数据,不推荐tcp。
3.topic和channel之间的关系:
1.主题和频道没有事先配置:通过发布指定主题,或订阅指定主题,在首次使用时创建主题;通过订阅指定主题的频道,在首次使用时创建频道;
2.一个topic可以有一个或多个channel,每个channel都是topic的完整副本,会收到主题的所有消息;多个channel是为了消费者对收到的消息执行不同的工作,比如ch1收到所有的数据,按照自身逻辑处理完,发送给a,ch2也收到所有的数据,按照自身逻辑处理完,发送给b;
3.一个通道可以连接多个客户端,每条消息都传递给客户端,消息均匀分发,负载均衡;如果队列中有消息未被消费,启动消费时消息可能被一个客户端独自消费。
工众号:李田路口