安装
curl -fsSL https://github.com/nsqio/nsq/releases/download/v1.2.1/nsq-1.2.1.linux-amd64.go1.16.6.tar.gz -o /D/Develop/
cd /D/Develop/
tar zxf nsq-1.2.1.linux-amd64.go1.16.6.tar.gz -C /D/Develop/
cd nsq-1.2.1.linux-amd64.go1.16.6/
./bin/nsqlookupd &
./bin/nsqd --lookupd-tcp-address=127.0.0.1:4160 &
./bin/nsqadmin --lookupd-http-address=0.0.0.0:4161 --http-address=0.0.0.0:8761 &
http://localhost:8761
curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=hello-word'
./bin/nsq_to_file --topic=hello-world --output-dir=/tmp/nsq-log --lookupd-http-address=127.0.0.1:4161
golang发送、消费消息
producer
package main
import (
"github.com/nsqio/go-nsq"
"io/ioutil"
"log"
"strconv"
)
var nullLogger = log.New(ioutil.Discard, "", log.LstdFlags)
func sendMessage() {
config := nsq.NewConfig()
producer, err := nsq.NewProducer("127.0.0.1:4150", config)
if err != nil {
log.Fatalln("连接失败: (127.0.0.1:4150)", err)
}
errPing := producer.Ping()
if errPing != nil {
log.Fatalln("无法ping通: 127.0.0.1:4150", errPing)
}
producer.SetLogger(nullLogger, nsq.LogLevelInfo)
for i := 0; i < 5; i++ {
message := "消息发送测试 " + strconv.Itoa(i+10000)
err2 := producer.Publish("one-test", []byte(message))
if err2 != nil {
log.Panic("生产者推送消息失败!")
}
}
producer.Stop()
}
func main() {
sendMessage()
}
consumer
package main
import (
"fmt"
"github.com/nsqio/go-nsq"
"log"
)
func doConsumerTask() {
config := nsq.NewConfig()
q, errNewCsmr := nsq.NewConsumer("one-test", "ch-one-test", config)
if errNewCsmr != nil {
fmt.Printf("fail to new consumer!, topic=%s, channel=%s", "one-test", "ch-one-test")
}
q.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error {
log.Printf("message: %v", string(message.Body))
message.Finish()
return nil
}))
lookupAddr := []string{
"127.0.0.1:4161",
}
err := q.ConnectToNSQLookupds(lookupAddr)
if err != nil {
log.Panic("[ConnectToNSQLookupds] Could not find nsqd!")
}
<-q.StopChan
stats := q.Stats()
fmt.Sprintf("message received %d, finished %d, requeued:%s, connections:%s",
stats.MessagesReceived, stats.MessagesFinished, stats.MessagesRequeued, stats.Connections)
}
func main() {
doConsumerTask()
}
参考资料:
https://www.cnblogs.com/phpper/p/13408463.html