這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
nsq是一個由bitly公司使用golang編寫的即時訊息佇列。
nsq官方目前提供了golang,py,js的用戶端,本文簡單介紹一下golang用戶端writer的使用。
官方go用戶端庫在這裡:github.com/bitly/go-nsq
go-nsq提供了上層的讀寫介面,分別為writer和reader,也就是說,如果你要向nsq發送訊息,那麼你首先需要使用writer,如果你要從nsq讀取訊息,你需要建立一個reader。
writer相對簡單一些,基本步驟如下:
1、與nsqd伺服器建立串連,建立writer
2、使用writer發送訊息
基本的代碼如下:
package mainimport ("fmt""github.com/bitly/go-nsq")var (wr *nsq.Writer)func openNsq(nsqaddr string) {if nsqaddr == "" {nsqaddr = "127.0.0.1:4150"}wr = nsq.NewWriter(nsqaddr)}func clicks(uid, nid int64) {s := fmt.Sprintf(`{"uid":%d, "nid":%d}`, uid, nid)wr.Publish("clicks", []byte(s))}
從上面的代碼可以看出:
1、建立串連使用NewWriter方法,這個方法很簡單,只需要提供伺服器位址即可。
2、writer使用Publish方法發送訊息,Publish方法原型如下:
func (w *Writer) Publish(topic string, body []byte) (int32, []byte, error)
Publish的第一個參數是topic,第二個參數是需要發送訊息的內容。如果你不瞭解什麼是topic,請參考官方文檔topic。
關於writer:
1、writer在go-nsqd的原始碼裡是一個結構體,並非interface
2、writer的Publish方法是同步發送,writer還有PublishAsync方法,用來非同步發送訊息;還有MultiPublish,同步發送多個訊息,MultiPublishAsync,非同步發送多條訊息;
3、writer使用完後,應該使用Stop方法關閉writer。