這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
上篇文章簡單介紹了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 nsqexampleimport ("github.com/bitly/go-nsq" "fmt")var _ = fmt.Printfvar (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