在使用nsq的时候遇到了莫名其妙的问题,即客户端监听channel读取消息时会报错:
```$xslt
2018-08-10 10:20:24,476 localhost-startStop-1 ERROR lookup.NSQLookupDynMapImpl - NDQ lookup wrong result: {"channels":[],"producers":[{"remote_address":"172.22.0.4:39562","host
name":"f2465b41063f","broadcast_address":"f2465b41063f","tcp_port":4150,"http_port":4151,"version":"1.0.0-compat"}]}
```
google不到原因,后来看代码找到这个log,应该是收到消息但是解析有问题,curl线上的nsq,发现返回是
```$xslt
{"status_code":200,"status_txt":"OK","data":{"channels":["xxx"],"producers":[{"remote_address":"xxx:33724","hostname":"xxx","broadcast_address":"xxx","tcp_port":xx,"http_port":4151,"version":"0.3.8"}]}}
```
线上版本是0.3.8, 而本地是1.0,相应消息格式不一样导致解析错误,为了兼容需要安装0.3.8版本
那么需要安装指定版本的话应该怎么做呢?
1、首先通过 brew info 查看具体信息
```$xslt
yixinf-jdeMacBook-Pro:/ yixinf-j$ brew info nsq
nsq: stable 1.0.0 (bottled), HEAD
Realtime distributed messaging platform
https://nsq.io/
/usr/local/Cellar/nsq/1.0.0_1 (16 files, 74.3MB) *
Poured from bottle on 2018-08-01 at 14:39:41
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/nsq.rb
==> Dependencies
Build: go ✘, gpm ✘
==> Options
--HEAD
Install HEAD version
==> Caveats
To have launchd start nsq now and restart at login:
brew services start nsq
Or, if you don't want/need a background service you can just run:
nsqd -data-path=/usr/local/var/nsq
yixinf-jdeMacBook-Pro:/ yixinf-j$
```
2、找到对应的From,并且将工程clone到本地
```$xslt
git clone https://github.com/Homebrew/homebrew-core.git
Cloning into 'homebrew-core'...
remote: Counting objects: 500022, done.
remote: Total 500022 (delta 0), reused 0 (delta 0), pack-reused 500021
Receiving objects: 100% (500022/500022), 186.55 MiB | 653.00 KiB/s, done.
Resolving deltas: 100% (313856/313856), done.
Checking out files: 100% (4838/4838), done.
```
3、找到相应的commit版本,并切换
```$xslt
git log ./Formula/nsq.rb
commit 7c494caa3bb8733e45ca9a536824fcd050ea5ada
Author: ilovezfs <ilovezfs@icloud.com>
Date: Mon Jun 20 08:50:01 2016 -0700
nsq 0.3.8
Closes #2161.
Signed-off-by: ilovezfs <ilovezfs@icloud.com>
git checkout 7c494caa3bb8733e45ca9a536824fcd050ea5ada
```
4、执行安装命令 brew install ./Formula/nsq.rb
```$xslt
brew install ./Formula/nsq.rb
```
5、启动
```$xslt
nohup nsqlookupd --http-address 10.106.164.222:4161 --tcp-address 0.0.0.0:4160 --broadcast-address 10.106.164.222 &
nohup nsqd --lookupd-tcp-address=10.106.164.222:4160 --broadcast-address 10.106.164.222 --tcp-address 0.0.0.0:4150 &
nohup nsqadmin --lookupd-http-address=10.106.164.222:4161 --http-address 10.106.164.222:4171 &
```
其他软件方法大致相同。
## MAC安装最新版
参照官网 https://nsq.io/overview/quick_start.html
1、安装
直接在终端执行命令即可
```$xslt
$ brew install nsq
```
2、启动
```
$ nsqlookupd
$ nsqd --lookupd-tcp-address=127.0.0.1:4160
$ nsqadmin --lookupd-http-address=127.0.0.1:4161
```
3、验证
```
$ 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'
$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'
$ nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161
```
可以在http://127.0.0.1:4171/中查看具体信息