1. 下载
下载之后解压,并将其bin路径添加到环境变量当中
github地址: https://github.com/nsqio/nsq/releases
文档: https://nsq.io/overview/quick_start.html
2. 使用说明
2.1 启动nsqlookupd
1 | nsqlookupd |
它会监听两个端口:
http: 4161
客户端用它来发现和管理。tcp: 4160
nsqd 用它来广播
可选参数:
http-address="127.0.0.1:4161"
: 监听 HTTP 客户端地址inactive-producer-timeout=5m0s
: 从上次 ping 之后,生产者驻留在活跃列表中的时长tcp-address="0.0.0.0:4160"
: TCP 客户端监听的地址broadcast-address
: 这个 lookupd 节点的外部地址, (默认主机名)tombstone-lifetime=45s
: 生产者保持 tombstoned 的时长verbose=false
: 允许输出日志version=false
: 打印版本信息
2.2 启动nsqd
1 | nsqd --lookupd-tcp-address=127.0.0.1:4160 |
它是一个守护进程,负责接收消息,传递消息给客户端,排队。 会监听两个端口:
http: 4151
,tcp: 4150
3.3 启动nsqadmin
1 | nsqadmin --lookupd-http-address=127.0.0.1:4161 |
它是一个Web页面,负责管理我们的消息队列, 它后面的地址即是我们在 nsqlookupd 里面
http-address
参数配置的地址,nsqadmin的监听地址为4171
,通过127.0.0.1:4171
地址可打开NSQ的Web管理页面
3. 基本使用
Channel是消费者订阅特定Topic的一种抽象。对于发往Topic的消息,nsqd向该Topic下的所有Channel投递消息,而同一个Channel只投递一次,Channel下如果存在多个消费者,则随机选择一个消费者做投递。这种投递方式可以被用作消费者负载均衡。和Topic一样,Channel同样有永久和临时之分,永久的Channel只能通过显式删除销毁,临时的Channel在最后一个消费者断开连接的时候被销毁
Topic
就是一个通道,我们可以往这个Topic里面发送消息Channel
起到一个负载均衡的作用,我们可以在一个Topic中建立多个Channel来共同消费这个Topic里面的消息。
我们建立了一个叫test-dev
的Topic,Channel为default
往通道里面发送消息
1 | curl -d 'hello world' 'http://127.0.0.1:4151/pub?topic=test-dev' |
从通道中消费消息,这里我们要指定从哪个Channel里消费,
1 | nsq_to_file --topic=test-dev -channel=default --output-dir=log --lookupd-http-address=127.0.0.1:4161 |
此时就会在当前目前下生成一个 log 文件夹,里面存放的就是我们这个Channel里的消息
4. 封装代码
安装第三方库
1 | go get -u github.com/youzan/go-nsq |
1 | package nsq |
测试
1 | package nsq |
如果你不想使用有赞的第三方库,你可以使用下面这个:
1 | go get -u github.com/nsqio/go-nsq |
代码
1 | package main |