golang nsq

第八共同体 · · 842 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

842 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传