成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Golang 語言編寫的消息隊(duì)列 NSQ 官方客戶端 go-nsq 怎么使用

開發(fā) 前端
本文我們主要介紹 NSQ 官方提供的 golang 客戶端 go-nsq。關(guān)于 NSQ 的更多內(nèi)容,感興趣的讀者朋友們可以查閱官方文檔,限于篇幅,本文不再贅述。

 [[431096]]

01 

介紹

NSQ 是 Golang 語言編寫的實(shí)時(shí)分布式消息傳遞平臺(也可以理解為消息隊(duì)列),它主要由三個守護(hù)進(jìn)程組成,分別是 nsqd 、 nsqlookupd 和  nsqadmin 。其中  nsqd 是核心組成部分,它負(fù)責(zé)處理客戶端的請求,比如生產(chǎn)、排序和消費(fèi)消息等; nsqlookupd 負(fù)責(zé)管理集群拓?fù)湫畔⒑吞峁┮粋€最終一致性的發(fā)現(xiàn)服務(wù), nsqadmin 是一個 web 界面的管理平臺,可以用于實(shí)時(shí)查看集群信息和執(zhí)行其他管理操作。單個  nsqd 可以含有很多 topic,每個 topic 可以含有很多 channel。

NSQ 支持跨平臺和多語言客戶端。使用 Mac 的讀者朋友們可以使用 brew 方便的安裝 NSQ。本文我們主要介紹 NSQ 官方提供的 golang 客戶端 go-nsq。關(guān)于 NSQ 的更多內(nèi)容,感興趣的讀者朋友們可以查閱官方文檔,限于篇幅,本文不再贅述。

使用 go-nsq 操作 NSQ,需要安裝  go-nsq 庫,它提供了許多用于操作 NSQ 的函數(shù)和方法。

安裝方式:

  1. // Mac 安裝 nsq 
  2. brew install nsq 
  3. // 安裝 go-nsq 
  4. go get -u github.com/nsqio/go-nsq 

02 

生產(chǎn)者

go-nsq 包中的 Producer 類型,用于向 NSQ 發(fā)送消息。首先,需要調(diào)用函數(shù) NewProducer 創(chuàng)建一個 Producer 實(shí)例,接收參數(shù)是 string 類型的 addr 和指針類型的 nsq.Config(NSQ 配置信息),返回結(jié)果是一個 Producer 實(shí)例的地址和 error。

需要注意的是,必須調(diào)用函數(shù) NewConfig 返回一個指針類型的 nsq.Config,它包含默認(rèn)配置信息。可以通過調(diào)用該實(shí)例的 Set 方法設(shè)置配置信息,并且必須在用于傳參之前設(shè)置,否則設(shè)置的配置信息將不會生效。

Producer 包含很多方法,本文主要介紹四個方法,分別是 Ping、String、Publish 和 Stop。其中 Ping 方法用于檢測 Producer 是否連接成功它配置的 nsqd ;String 方法返回 Producer 連接的  nsqd 的地址;Publish 方法用于同步發(fā)送消息到指定的 topic;Stop 方法用于優(yōu)雅地停止 Producer。

示例代碼:

  1. // 默認(rèn)配置信息 
  2. config := nsq.NewConfig() 
  3.  
  4. // 創(chuàng)建生產(chǎn)者 
  5. producer, err := nsq.NewProducer("127.0.0.1:4150", config) 
  6. if err != nil { 
  7.  log.Fatal(err) 
  8. // 驗(yàn)證生成者連接是否成功 
  9. err = producer.Ping() 
  10. if err != nil { 
  11.  log.Fatal(err) 
  12. // 返回生產(chǎn)者地址 
  13. producerAddr := producer.String() 
  14. log.Printf("producerAddr:%v", producerAddr) 
  15. messageBody := []byte("hello"
  16. topicName := "topic" 
  17. // 同步發(fā)送消息到指定 topic 
  18. err = producer.Publish(topicName, messageBody) 
  19. if err != nil { 
  20.  log.Fatal(err) 
  21. producer.Stop() 

運(yùn)行結(jié)果:

  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 

消費(fèi)者

go-nsq 包中的 Consumer 類型,用于從 NSQ 消費(fèi)消息。首先,需要調(diào)用函數(shù) NewConsumer 創(chuàng)建一個 Consumer 實(shí)例,接收參數(shù)是 string 類型的 topic 和 channel,指針類型的 nsq.Config(NSQ 配置信息),返回結(jié)果是一個 Consumer 實(shí)例的地址和 error。

需要注意的是,必須調(diào)用函數(shù) NewConfig 返回一個指針類型的 nsq.Config,它包含默認(rèn)配置信息。可以通過調(diào)用該實(shí)例的 Set 方法設(shè)置配置信息,并且必須在用于傳參之前設(shè)置,否則設(shè)置的配置信息將不會生效。

Consumer 包含很多方法,本文主要介紹三個方法,分別是 Stats、AddHandler 和 ConnectToNSQD。其中 Stats 方法用于檢索 Consumer 的當(dāng)前連接和消息統(tǒng)計(jì)信息;AddHandler 用于為 Consumer 消費(fèi)的消息設(shè)置處理函數(shù),每個處理函數(shù)都獨(dú)立運(yùn)行在一個 goroutine 中,如果需要啟動多個 goroutine 運(yùn)行處理函數(shù),可以多次調(diào)用 AddHandler;ConnectToNSQD 用于連接配置的 nsqd 。

示例代碼:

  1. config := nsq.NewConfig() 
  2.  // 創(chuàng)建 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 都運(yùn)行在單獨(dú)的 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 

運(yùn)行結(jié)果:

  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 

總結(jié)

本文主要介紹 Golang 語言編寫的實(shí)時(shí)分布式消息平臺 NSQ 的 golang 客戶端 go-nsq。它是 NSQ 官方提供的 NSQ Golang 客戶端。并且 分別介紹了 Producer 和 Consumer 的簡單使用方法,大家可以根據(jù)自己的業(yè)務(wù)需求,使用 go-nsq 靈活運(yùn)用 NSQ。關(guān)于 go-nsq 的更多內(nèi)容,感興趣的讀者朋友們可以閱讀官方文檔。

責(zé)任編輯:張燕妮 來源: Golang語言開發(fā)棧
相關(guān)推薦

2021-08-01 23:18:21

Redis Golang命令

2021-10-18 05:00:38

語言GoRequestHTTP

2021-05-07 15:28:03

Kafka客戶端Sarama

2022-02-20 23:15:46

gRPCGolang語言

2011-08-17 10:10:59

2011-03-21 14:53:36

Nagios監(jiān)控Linux

2011-04-06 14:24:20

Nagios監(jiān)控Linux

2024-07-30 08:12:04

Java消息go

2021-10-10 23:02:49

Golang語言代碼

2010-05-26 09:26:43

Cassandra

2011-10-31 13:42:46

Android客戶端人人網(wǎng)

2021-03-12 16:21:02

LinuxEvernote客戶端

2012-10-11 17:02:02

IBMdw

2010-05-12 15:46:51

Subversion客

2023-12-09 14:29:30

編程語言Go

2010-03-18 17:30:46

Java Socket

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2012-01-13 10:29:37

ibmdw

2020-04-23 09:32:33

zookeeperCP系統(tǒng)

2010-06-01 13:54:42

TortoiseSVN
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日韩美女 | 欧美一级在线免费 | 一本大道久久a久久精二百 国产成人免费在线 | 欧美成人精品一区二区三区 | 日韩av福利在线观看 | 久久91| 国产精品99久久久久久久vr | 老子午夜影院 | 精品亚洲一区二区三区四区五区 | 一区二区三区精品视频 | 国产精品美女久久久久久久久久久 | 97视频人人澡人人爽 | 国产精品亚洲第一区在线暖暖韩国 | 午夜精品久久久久久不卡欧美一级 | 天天操妹子 | 国产玖玖| 精品国产一区二区三区久久久四川 | 日韩毛片 | 99久久99热这里只有精品 | 亚洲情综合五月天 | 成人高清在线视频 | 国产高清在线视频 | 久久精品色欧美aⅴ一区二区 | 网站国产| 久久手机在线视频 | 欧美国产精品 | 亚洲欧美一区二区在线观看 | 一级毛片视频在线 | 欧洲视频一区二区 | 午夜精品一区二区三区在线观看 | 亚洲精品成人在线 | 久久久久成人精品免费播放动漫 | 日韩影院在线 | 黄色毛片免费看 | 97人人超碰 | 一区二区三区免费 | 美女视频h| 91视频在线网站 | 久草成人网 | 久久精品久久综合 | 欧美一级大片免费观看 |