nsq使用(reader部分)

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

上篇文章简单介绍了nsq writer部分的使用:http://guotie.sinaapp.com/?p=533 ,本文介绍一下reader的使用。

与writer类似,nsq提供了一个高层接口:reader。不过,reader部分还需要提供一个Handler,用来处理收到的消息。

nsq reader的Handler是一个接口,定义如下:

type Handler interface {
    HandleMessage(message *Message) error
}

我们所做的主要就是实现这个接口。

reader的基本步骤如下:

1、新建一个nsq reader;

NewReader的定义如下:

func NewReader(topic string, channel string) (*Reader, error)

topic是nsqd的topic,channel可以理解为这个reader的名称。一个topic可以有多个reader同时去读,每个reader都是一个channel。

2、使用AddHandler将具体处理消息的Handler加入到reader;

除了AddHandler函数外,还有AddSyncHandler,增加一个异步处理消息的函数到reader,详细信息可以参考文档。

3、reader连接Nsqd;搞定!

当reader连接到Nsqd后,go-nsq收到消息后,会调用我们的Handler处理消息。

package nsqexample

import (
	"github.com/bitly/go-nsq"
        "fmt"
)

var _ = fmt.Printf
var (
	rd *nsq.Reader
)

type ClickHandler struct {
	nsqaddr string
}

func NsqClick(nsqaddr string) {
	rd, err := nsq.NewReader("clicks", "ch1")
	if err != nil {
		panic(err.Error())
	}
	click := ClickHandler{nsqaddr: nsqaddr}

	rd.AddHandler(&click)
	err = rd.ConnectToNSQ(click.nsqaddr)
	if err != nil {
		panic(err.Error())
	}
}

func (c *ClickHandler) HandleMessage(msg *nsq.Message) error {
        // 处理消息代码
        fmt.Println(string(msg.Body))
	return nil
}

go-nsq的官方文档:http://godoc.org/github.com/bitly/go-nsq#Reader


有疑问加站长微信联系(非本文作者)

本文来自:铁哥的博客

感谢作者:铁哥

查看原文:nsq使用(reader部分)

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

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