文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-02 18:37

关注

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 的函数和方法。

安装方式:

  1. // Mac 安装 nsq 
  2. brew install nsq 
  3. // 安装 go-nsq 
  4. 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 是否连接成功它配置的 nsqd ;String 方法返回 Producer 连接的  nsqd 的地址;Publish 方法用于同步发送消息到指定的 topic;Stop 方法用于优雅地停止 Producer。

示例代码:

  1. // 默认配置信息 
  2. config := nsq.NewConfig() 
  3.  
  4. // 创建生产者 
  5. producer, err := nsq.NewProducer("127.0.0.1:4150", config) 
  6. if err != nil { 
  7.  log.Fatal(err) 
  8. // 验证生成者连接是否成功 
  9. err = producer.Ping() 
  10. if err != nil { 
  11.  log.Fatal(err) 
  12. // 返回生产者地址 
  13. producerAddr := producer.String() 
  14. log.Printf("producerAddr:%v", producerAddr) 
  15. messageBody := []byte("hello"
  16. topicName := "topic" 
  17. // 同步发送消息到指定 topic 
  18. err = producer.Publish(topicName, messageBody) 
  19. if err != nil { 
  20.  log.Fatal(err) 
  21. producer.Stop() 

运行结果:

  1. 2021/10/23 18:58:23 INF    1 (127.0.0.1:4150) connecting to nsqd 
  2. 2021/10/23 18:58:23 producerAddr:127.0.0.1:4150 
  3. 2021/10/23 18:58:23 INF    1 stopping 
  4. 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 。

示例代码:

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

运行结果:

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

04 

总结

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

来源:Golang语言开发栈内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯