假设我们的服务器安装下面要求编排。
nsqlookup 集群列表
192.168.234.77
192.168.234.36
192.168.234.39
nsq 节点
192.168.234.117
192.168.234.118
nsqadmin 节点
192.168.234.119
下载最新的二进制包,命令行操作如下:
tar -xvf nsq-0.3.8.linux-amd64.go1.6.2.tar.gz
mv nsq-0.3.8.linux-amd64.go1.6.2 nsq
设置nsq的环境变量,假设nsq的bin路径在/usr/local/software/nsq下。运行命令如下:
vi /etc/profile
export NSQ_HOME=/usr/local/software/nsq
export PATH=$PATH:$NSQ_HOME/bin
. /etc/profile
创建执行脚本,分别创建start-nsqlookup.sh, start-nsq.sh和 start-nsqadmin.
start-nsqlookup.sh
#nsqlookup
eval nsqlookupd --verbose > nsqlookup.log 2>&1 "&"
start-nsq.sh
#nsq
eval nsqd –data-path=/usr/local/software/nsq/data –lookupd-tcp-address=192.168.234.77:4160,192.168.234.36:4160,192.168.234.39:4160 > nsqd.log 2>&1 “&”
start-nsqadmin.sh
#nsqadmin
eval nsqadmin –lookupd-http-address=192.168.234.77:4161,192.168.234.36:4161,192.168.234.39:4161 > nsqadmin.log 2>&1 “&”
首先需要安装次序运行上面的脚本,必选先运行nsqlookup集群,在运行start-nsqadmin.sh或者start-nsq.sh.
在对应服务器上执行对应的脚本。
nsqlookup节点
#192.168.234.77
#192.168.234.36
#192.168.234.39
sh start-nsqlookup.sh
nsq节点上
#192.168.234.117
#192.168.234.118
sh start-nsq.sh
nsqadmin节点上
#192.168.234.119
sh start-nsqadmin.sh
查看运行效果,可以直接访问nsqadmin节点http://192.168.234.119:4171/。
package main
import (
"log"
"github.com/bitly/go-nsq"
"io/ioutil"
"strconv"
)
var nullLogger = log.New(ioutil.Discard, "", log.LstdFlags)
func sendMsg(message string){
//init default config
config := nsq.NewConfig()
w, _ := nsq.NewProducer("192.168.2.117:4150", config)
err := w.Ping()
if err != nil {
//192.168.2.117:4150,192.168.2.68:4150
log.Fatalln("error ping 10.50.115.16:4150", err)
// switch the second nsq. You can use nginx or HAProxy for HA.
w, _ = nsq.NewProducer("192.168.2.68:4150", config)
}
w.SetLogger(nullLogger, nsq.LogLevelInfo)
err2 := w.Publish("a-test", []byte(message))
if err2 != nil {
log.Panic("Could not connect nsq")
}
w.Stop()
}
func main() {
for i := 0; i < 2; i ++ {
sendMsg("msg index "+ strconv.Itoa(i + 10000))
}
}
恭喜,你已经成功发送两个消息到nsq节点。
package main
import (
"log"
"github.com/bitly/go-nsq"
"fmt"
)
func doSimpleConsumerTask(){
config := nsq.NewConfig()
q, _ := nsq.NewConsumer("a-test", "ch", config)
q.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error {
log.Printf("message: %v", string(message.Body))
message.Finish()
return nil
}))
lookupAddr := []string {
"192.168.234.77:4161",
"192.168.234.36:4161",
"192.168.234.39:4161",
}
err := q.ConnectToNSQLookupds(lookupAddr)
if err != nil {
log.Panic("Could not connect")
}
<-q.StopChan
stats := q.Stats()
fmt.Sprintf("message received %d, finished %d", stats.MessagesReceived, stats.MessagesFinished)
}
func main(){
doSimpleConsumerTask()
}
程序运行输出:
2017/02/23 09:07:50 message: msg index 10000
2017/02/23 09:07:50 message: msg index 10001
消费者持续接受发送来的信息,运行程序后端。
欢迎订阅微信公众号