NSQ docker部署
镜像
nsqio/nsq:v1.2.0
启动指令
启动nsqlookupd
nsqlookupd是管理拓扑信息的守护进程。客户端查询nsqlookupd来发现特定主题的nsqd生产者,nsqd节点广播主题和通道信息。
docker run --name lookupd -p 4160:4160 -p 4161:4161 -d nsqio/nsq:v1.2.0 /nsqlookupd
说明
- -p 是映射端口
- -d 是后台运行容器
- /nsqlookupd 就是启动命令
启动nsqd
nsqd是接收、队列和向客户机传递消息的守护进程。它可以独立运行,但通常配置在具有nsqlookupd实例的集群中(在这种情况下,它将宣布主题和发现通道)
docker run --name nsqd -p 4150:4150 -p 4151:4151 -d nsqio/nsq:v1.2.0 /nsqd --broadcast-address=172.24.145.37 --lookupd-tcp-address=172.24.145.37:4160
说明
- lookupd-tcp-address 本机IP+PORT
- broadcast-address 本机IP
- data-path 保存数据路径
均可在ifconfig查到
启动nsqadmin
nsqadmin是一个Web UI,用于实时查看聚合的集群统计信息并执行各种管理任务。
docker run -d --name nsqadmin -p 4171:4171 nsqio/nsq:v1.2.0 /nsqadmin --lookupd-http-address=172.24.145.37:4161
说明
- lookupd-tcp-address 本机IP+lookupd配置的PORT
范例代码
nsq包:github.com/nsqio/go-nsq
要现在nsqadmin上创建topic和channel
package main
import (
"fmt"
"github.com/nsqio/go-nsq"
"time"
)
var (
addr = "127.0.0.1:4150"
defaultConfig = nsq.NewConfig()
)
func main() {
Producer("test-nsq", []byte("Hello Pibigstar"))
Consumer("test-nsq", "test-channel", HandleMessage)
time.Sleep(time.Second * 3)
}
func HandleMessage(msg *nsq.Message) error {
fmt.Println(string(msg.Body))
return nil
}
// nsq发布消息
func Producer(topic string, data []byte) error {
// 新建生产者
p, err := nsq.NewProducer(addr, defaultConfig)
if err != nil {
panic(err)
}
// 发布消息
return p.Publish(topic, data)
}
// 消费消息
func Consumer(topic, channel string, handlerFunc nsq.HandlerFunc) error {
//新建一个消费者
c, err := nsq.NewConsumer(topic, channel, defaultConfig)
if err != nil {
panic(err)
}
//添加消息处理
c.AddHandler(handlerFunc)
//建立连接
return c.ConnectToNSQD(addr)
}