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 main import ( "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。
有疑问加站长微信联系(非本文作者)