golang nsq示例使用介紹

2022-07-09 17:12:13 字數 4040 閱讀 7059

直接解壓後(我的重新命名了nsq-1.2.0):bin目錄裡就會出現一大堆nsq_…開頭的可執行檔案:

上面是結束了nsql的常用使用元件,我們再來回顧下上面的概念問題:

nsqlookupd

看看官方的原話是怎麼說:

nsqlookupd是守護程序負責管理拓撲資訊。客戶端通過查詢 nsqlookupd 來發現指定話題(topic)的生產者,並且 nsqd 節點廣播話題(topic)和通道(channel)資訊

簡單的說nsqlookupd就是中心管理服務,它使用tcp(預設埠4160)管理nsqd服務,使用http(預設埠4161)管理nsqadmin服務。同時為客戶端提供查詢功能

總的來說,nsqlookupd具有以下功能或特性

唯一性,在乙個nsq服務中只有乙個nsqlookupd服務。當然也可以在集群中部署多個nsqlookupd,但它們之間是沒有關聯的

去中心化,即使nsqlookupd崩潰,也會不影響正在執行的nsqd服務

充當nsqd和naqadmin資訊互動的中介軟體

提供乙個http查詢服務,給客戶端定時更新nsqd的位址目錄

nsqadmin

官方原話:是一套 web ui,用來匯集集群的實時統計,並執行不同的管理任務

總的來說,nsqadmin具有以下功能或特性

提供乙個對topic和channel統一管理的操作介面以及各種實時監控資料的展示,介面設計的很簡潔,操作也很簡單

展示所有message的數量,恩…裝x利器

能夠在後台建立topic和channel,這個應該不常用到

nsqadmin的所有功能都必須依賴於nsqlookupd,nsqadmin只是向nsqlookupd傳遞使用者操作並展示來自nsqlookupd的資料

nsqadmin預設的訪問位址是建立乙個channer001主題,並傳送乙個how are you訊息

官方原話:nsqd 是乙個守護程序,負責接收,排隊,投遞訊息給客戶端

簡單的說,真正幹活的就是這個服務,它主要負責message的收發,佇列的維護。nsqd會預設監聽乙個tcp埠(

4150)和乙個http埠(4151

)以及乙個可選的https埠

總的來說,nsqd 具有以下功能或特性

對訂閱了同乙個topic,同乙個channel的消費者使用負載均衡策略(不是輪詢)

只要channel存在,即使沒有該channel的消費者,也會將生產者的message快取到佇列中(注意訊息的過期處理)

保證佇列中的message至少會被消費一次,即使nsqd退出,也會將佇列中的訊息暫存磁碟上(結束程序等意外情況除外)

限定記憶體占用,能夠配置nsqd中每個channel佇列在記憶體中快取的message數量,一旦超出,message將被快取到磁碟中

topic,channel一旦建立,將會一直存在,要及時在管理臺或者用**清除無效的topic和channel,避免資源的浪費

這是官方的圖,第乙個channel(meteics)因為有多個消費者,所以觸發了負載均衡機制。後面兩個channel由於沒有消費者,所有的message均會被快取在相應的佇列裡,直到消費者出現

官方提供了go語言版的客戶端:go-nsq,更多客戶端支援請檢視client libraries。

go get -u github.com/nsqio/go-nsq
乙個簡單的生產者示例**如下:

2. 生產者ping

if errping !=nil

producer.setlogger(nulllogger, nsq.loglevelinfo)

//3. 設定不輸出info級別的日誌

for i := 0; i < 5; i++

}producer.stop()

//5. 生產者停止執行

}func main()

建立消費者的方式有兩種,一種是通過http請求來發現nsqd生產者和配置的topic,另一種是直接使用tcp請求來連線本地例項 。

示例**如下所示:

//2. 新增處理訊息的方法

q.addhandler(nsq.handlerfunc(func(message *nsq.message) error ))

//3. 通過http請求來發現nsqd生產者和配置的topic(推薦使用這種方式)

lookupaddr := string

err :=q.connecttonsqlookupds(lookupaddr)

if err !=nil

//4. 接收消費者停止通知

//5. 獲取統計結果

stats :=q.stats()

fmt.sprintf(

"message received %d, finished %d, requeued:%s, connections:%s",

stats.messagesreceived, stats.messagesfinished, stats.messagesrequeued, stats.connections)

}func main()

將上面的**編譯執行,然後在終端輸入後效果如下:

使用瀏覽器開啟可以檢視到類似下面的頁面: 在下面這個頁面能看到當前的topic資訊: 

LDAP介紹和使用ACL示例

決定了將要應用訪問控制的條目和屬性。條目通常通過兩種方式選定 通過dn或者通過過濾器。下面的示例通過dn選擇條目 to to dn to dn.第一種格式用於選擇所有的條目。第二種格式用於選擇標準化的dn與所給正規表示式相匹配的條目 第二種格式不會在本文件中深入討論 第三種格式用語選擇在所請求的dn...

MySQL示例介紹

1.將mysql資料庫中的資料加表結構匯出 mysqldump uroot p h127.0.0.1 dt test d db test.sql 2.將mysql資料庫中的表結構加儲存過程匯出 mysqldump uroot d r h127.0.0.1 db test d db proc.sql ...

makefile介紹及示例

乙個開發工程會有很多的原始檔,它們按型別 功能 模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯等。makefile檔案關係到整個工程的編譯規則。寫好的makefile,只要執行make命令,就會按makefile裡定義...