nsq使用(writer部分)
铁哥 · · 3900 次点击 · · 开始浏览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。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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。