Golang 语言编写的消息队列 NSQ 官方客户端 go-nsq 怎么使用

人工智能2025-11-05 16:01:591

 

01 

介绍

NSQ 是编写 Golang 语言编写的实时分布式消息传递平台(也可以理解为消息队列),它主要由三个守护进程组成,消端分别是息队 nsqd 、 nsqlookupd 和  nsqadmin 。官方其中  nsqd 是客户核心组成部分,它负责处理客户端的使用请求,比如生产、编写排序和消费消息等; nsqlookupd 负责管理集群拓扑信息和提供一个最终一致性的消端发现服务, nsqadmin 是息队一个 web 界面的管理平台,可以用于实时查看集群信息和执行其他管理操作。官方单个  nsqd 可以含有很多 topic,客户每个 topic 可以含有很多 channel。使用

NSQ 支持跨平台和多语言客户端。编写使用 Mac 的消端读者朋友们可以使用 brew 方便的安装 NSQ。本文我们主要介绍 NSQ 官方提供的息队 golang 客户端 go-nsq。关于 NSQ 的更多内容,感兴趣的读者朋友们可以查阅官方文档,限于篇幅,本文不再赘述。

使用 go-nsq 操作 NSQ,需要安装  go-nsq 库,亿华云它提供了许多用于操作 NSQ 的函数和方法。

安装方式:

// Mac 安装 nsq brew install nsq // 安装 go-nsq go get -u github.com/nsqio/go-nsq 

02 

生产者

go-nsq 包中的 Producer 类型,用于向 NSQ 发送消息。首先,需要调用函数 NewProducer 创建一个 Producer 实例,接收参数是 string 类型的 addr 和指针类型的 nsq.Config(NSQ 配置信息),返回结果是一个 Producer 实例的地址和 error。

需要注意的是,必须调用函数 NewConfig 返回一个指针类型的 nsq.Config,它包含默认配置信息。可以通过调用该实例的 Set 方法设置配置信息,并且必须在用于传参之前设置,否则设置的配置信息将不会生效。

Producer 包含很多方法,本文主要介绍四个方法,分别是 Ping、String、Publish 和 Stop。其中 Ping 方法用于检测 Producer 是否连接成功它配置的WordPress模板 nsqd ;String 方法返回 Producer 连接的  nsqd 的地址;Publish 方法用于同步发送消息到指定的 topic;Stop 方法用于优雅地停止 Producer。

示例代码:

// 默认配置信息 config := nsq.NewConfig() // 创建生产者 producer, err := nsq.NewProducer("127.0.0.1:4150", config) if err != nil {  log.Fatal(err) } // 验证生成者连接是否成功 err = producer.Ping() if err != nil {  log.Fatal(err) } // 返回生产者地址 producerAddr := producer.String() log.Printf("producerAddr:%v", producerAddr) messageBody := []byte("hello") topicName := "topic" // 同步发送消息到指定 topic err = producer.Publish(topicName, messageBody) if err != nil {  log.Fatal(err) } producer.Stop() 

运行结果:

2021/10/23 18:58:23 INF    1 (127.0.0.1:4150) connecting to nsqd 2021/10/23 18:58:23 producerAddr:127.0.0.1:4150 2021/10/23 18:58:23 INF    1 stopping 2021/10/23 18:58:23 INF    1 exiting router 

03 

消费者

go-nsq 包中的 Consumer 类型,用于从 NSQ 消费消息。首先,需要调用函数 NewConsumer 创建一个 Consumer 实例,接收参数是 string 类型的 topic 和 channel,指针类型的 nsq.Config(NSQ 配置信息),返回结果是一个 Consumer 实例的地址和 error。

需要注意的是,必须调用函数 NewConfig 返回一个指针类型的 nsq.Config,它包含默认配置信息。可以通过调用该实例的 Set 方法设置配置信息,并且必须在用于传参之前设置,否则设置的配置信息将不会生效。

Consumer 包含很多方法,本文主要介绍三个方法,分别是 Stats、免费信息发布网AddHandler 和 ConnectToNSQD。其中 Stats 方法用于检索 Consumer 的当前连接和消息统计信息;AddHandler 用于为 Consumer 消费的消息设置处理函数,每个处理函数都独立运行在一个 goroutine 中,如果需要启动多个 goroutine 运行处理函数,可以多次调用 AddHandler;ConnectToNSQD 用于连接配置的 nsqd 。

示例代码:

config := nsq.NewConfig()  // 创建 Consumer  consumer, err := nsq.NewConsumer("topic", "channel", config)  if err != nil {   log.Fatal(err)  }  consumerStats := consumer.Stats()  log.Printf("consumerStats:%+v", consumerStats)  // 给 Consumer 添加处理器,可添加多个,每个 Handler 都运行在单独的 goroutine 中  consumer.AddHandler(&myMessageHandler{})  // 连接 nsqd  err = consumer.ConnectToNSQD("127.0.0.1:4150")  if err != nil {   log.Fatal(err)  }  <-consumer.StopChan 

运行结果:

2021/10/23 18:59:30 consumerStats:&{MessagesReceived:0 MessagesFinished:0 MessagesRequeued:0 Connections:0} 2021/10/23 18:59:30 INF    1 [topic/channel] (127.0.0.1:4150) connecting to nsqd 2021/10/23 18:59:30 hello 

04 

总结

本文主要介绍 Golang 语言编写的实时分布式消息平台 NSQ 的 golang 客户端 go-nsq。它是 NSQ 官方提供的 NSQ Golang 客户端。并且 分别介绍了 Producer 和 Consumer 的简单使用方法,大家可以根据自己的业务需求,使用 go-nsq 灵活运用 NSQ。关于 go-nsq 的更多内容,感兴趣的读者朋友们可以阅读官方文档。

本文地址:http://www.bzve.cn/news/609a64898742.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

7zip 是一款开源的归档应用程序,开始是为 Windows 系统而开发的。它能对多种格式的档案文件进行打包或解包处理,除了支持其原生的 7z 格式的文档外,还支持包括 XZ、GZIP、TAR、ZIP 和 BZIP2 等这些格式。 通常,7zip 也用来解压 RAR、DEB、RPM 和 ISO 等格式的文件。除了简单的归档功能,7zip 还具有支持 AES-256 算法加密以及自解压和建立多卷存档功能。在支持 POSIX 标准的系统上(Linux、Unix、BSD),原生的 7zip 程序被移植过来并被命名为 p7zip(“POSIX 7zip” 的简称)。下面介绍如何在 Linux 中安装 7zip (或 p7zip)。在 Debian、Ubuntu 或 Linux Mint 系统中安装 7zip在基于的 Debian 的发布系统中存在有三种 7zip 的软件包。     p7zip: 包含 7zr(最小的 7zip 归档工具),仅仅只能处理原生的 7z 格式。 p7zip-full: 包含 7z ,支持 7z、LZMA2、XZ、ZIP、CAB、GZIP、BZIP2、ARJ、TAR、CPIO、RPM、ISO 和 DEB 格式。 p7zip-rar: 包含一个能解压 RAR 文件的插件。建议安装 p7zip-full 包(不是 p7zip),因为这是最完全的 7zip 程序包,它支持很多归档格式。此外,假如您想处理 RAR 文件话,还需要安装 p7zip-rar 包,做成一个独立的插件包的原因是因为 RAR 是一种专有格式。复制代码代码如下: $ sudo apt-get install p7zip-full p7zip-rar 在 Fedora 或 CentOS/RHEL 系统中安装 7zip基于红帽的发布系统上提供了两个 7zip 的软件包。     p7zip: 包含 7za 命令,支持 7z、ZIP、GZIP、CAB、ARJ、BZIP2、TAR、CPIO、RPM 和 DEB 格式。 p7zip-plugins: 包含 7z 命令,额外的插件,它扩展了 7za 命令(例如支持 ISO 格式的抽取)。在 CentOS/RHEL 系统中,在运行下面命令前您需要确保 EPEL 资源库 可用,但在 Fedora 系统中就不需要额外的资源库了。复制代码代码如下:$ sudo yum install p7zip p7zip-plugins 注意,跟基于 Debian 的发布系统不同的是,基于红帽的发布系统没有提供 RAR 插件,所以您不能使用 7z 命令来抽取解压 RAR 文件。使用 7z 创建或提取归档文件一旦安装好 7zip 软件后,就可以使用 7z 命令来打包解包各式各样的归档文件了。7z 命令会使用不同的插件来辅助处理对应格式的归档文件。使用 “a” 选项就可以创建一个归档文件,它可以创建 7z、XZ、GZIP、TAR、 ZIP 和 BZIP2 这几种格式的文件。假如指定的归档文件已经存在的话,它会把文件“附加”到存在的归档中,而不是覆盖原有归档文件。复制代码代码如下:$ 7z a 使用 “e” 选项可以抽取一个归档文件,抽取出的文件会放在当前目录。抽取支持的格式比创建时支持的格式要多的多,包括 7z、XZ、GZIP、TAR、ZIP、BZIP2、LZMA2、CAB、ARJ、CPIO、RPM、ISO 和 DEB 这些格式。复制代码代码如下:$ 7z e 解包的另外一种方式是使用 “x” 选项。和 “e” 选项不同的是,它使用的是全路径来抽取归档的内容。复制代码代码如下:$ 7z x 要查看归档的文件列表,使用 “l” 选项。复制代码代码如下:$ 7z l 要更新或删除归档文件,分别使用 “u” 和 “d” 选项。复制代码代码如下: $ 7z u $ 7z d 要测试归档的完整性,使用:复制代码代码如下:$ 7z t

微星S100(快速高效的性能和便捷的操作体验)

盛夏内存卡(高速传输、大容量存储,让您的夏日畅快无忧)

索尼A25推SE535(完美融合,超越期待)

让电扇带来清凉的小技巧(轻松应对炎热夏日的高温天气)

因特尔2300(探索因特尔2300处理器的强大功能和优势)

华为手机视频拍摄能力如何?(华为手机在视频拍摄方面的表现以及用户体验)

华硕10周年主板(华硕10周年主板在技术和性能方面的突破表现及用户体验)

热门文章

友情链接

滇ICP备2023006006号-39