在对比了市面上多款消息队列之后,基于我们研发团队的现状,我决定选用nsq作为我们的消息队列。其最吸引我的特性倒并非是高并发,水平扩展;而是支持HTTP请求,使用简单。然而NSQ的文档不够详尽,社区不够活跃的问题真让我耗费了很长时间才搞定。
NSQ基于GO语言,先安装Go,问题不大,注意与NSQ要求的版本相适应,我选用的go1.9
下载标准安装包
https://golang.org/dl/
解压到/usr/local目录
$ sudo tar -xzvf go1.5.2.linux-amd64.tar.gz /usr/local
在$HOME目录下创建文件夹gopath
$ vi /etc/profile
在 /etc/profile 添加如下内容
export GOPATH=$HOME/gopath
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
然后我们刷新环境变量
$ source /etc/profile
最后我们验证一下是否安装成功
$ go version
直接下载官网安装包
$ wget https://s3.amazonaws.com/bitly-downloads/nsq/nsq-1.0.0-compat.linux-amd64.go1.8.tar.gz
$ sudo tar -xzvf nsq-1.0.0-compat.linux-amd64.go1.8.tar.gz
$ sudo mv nsq-1.0.0-compat.linux-amd64.go1.8 /usr/local/nsq
$ cd /usr/local/nsq
NSQ需要主要启动三个模块nsqd nsqlokkupd nsqadmin
$ nohup ./nsqlookupd &
$ nohup ./nsqd --lookupd-tcp-address=127.0.0.1:4160 --broadcast-address=139.196.205.* &
这一步就是官方文档坑爹的地方,不加上–broadcast-address=139.196.205.* 客户端是无法连接的 后面的IP是你的实际的服务器IP
$ nohup ./nsqadmin --lookupd-http-address=127.0.0.1:4161 &
此时打开139.196.205.*:4161 会看到NSQadmin的web界面
创建一个topic
$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'
持久化
$ nohup ./nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161 &
持续推送消息
$ curl -d 'hello world 2' 'http://127.0.0.1:4151/pub?topic=test'
$ curl -d 'hello world 3' 'http://127.0.0.1:4151/pub?topic=test'