美文网首页
golang nsq

golang nsq

作者: 第八共同体 | 来源:发表于2019-07-20 09:36 被阅读0次

    1.安装

    https://nsq.io/deployment/installing.html

    2.快速入门

    在一个终端中,运行nsqlookupd
    在另一个终端中,运行nsqd --lookupd-tcp-address=127.0.0.1:4160
    如果想开启在web UI查看整个节点状况,可以在另一个终端中,运行nsqadmin --lookupd-http-address=127.0.0.1:4161
    此时,打开http://127.0.0.1:4171,并没有任何的组件,我们首先发布一个消息到 一个topic,此时,topic未建立的,待执行发送后,会新建topic
    测试发送curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=baoer'

    topic
    可以看到已经有一个topic了,但topic中的channel并不会自动创建,web页面上也会显示,没有channel,此时我们可以创建一个channel测试看一下
    image.png
    channel创建好了以后,消息发送后,channel可自动获取到,此时并没有消费者从channel中获取消息,我们可以写一个简易的客户端来消费channel中的消息
    package main
    
    import (
        "fmt"
        "sync"
    
        "github.com/nsqio/go-nsq"
    )
    
    func main() {
        testNSQ()
    }
    
    type NSQHandler struct {
    }
    
    func (this *NSQHandler) HandleMessage(msg *nsq.Message) error {
        fmt.Println("receive", msg.NSQDAddress, "message:", string(msg.Body))
        return nil
    }
    
    func testNSQ() {
        url := "127.0.0.1:4150"
    
        waiter := sync.WaitGroup{}
        waiter.Add(1)
    
        go func() {
            defer waiter.Done()
            config := nsq.NewConfig()
            config.MaxInFlight = 9
    
            for i := 0; i < 10; i++ {
                consumer, err := nsq.NewConsumer("baoer", "test", config)
                if nil != err {
                    fmt.Println("err", err)
                    return
                }
    
                consumer.AddHandler(&NSQHandler{})
                err = consumer.ConnectToNSQD(url)
                if nil != err {
                    fmt.Println("err", err)
                    return
                }
            }
            select {}
        }()
    
        waiter.Wait()
    }
    
    

    这样,当有消息发送到topic中的时候,客户端就可以消费相应的消息了


    两个消息队列.png
    整个节点状况.png

    本文档仅为入门记录,更多详细文档,待整理后发布。

    相关文章

      网友评论

          本文标题:golang nsq

          本文链接:https://www.haomeiwen.com/subject/iedylctx.html