NSQ學習筆記

NSQ架構

在這裏插入圖片描述

NSQ組件

NSQ 由 3 個守護進程組成:

  • nsqd 是接收、隊列和傳送消息到客戶端的守護進程。
  • nsqlookupd 是管理的拓撲信息,並提供了最終一致發現服務的守護進程。
  • nsqadmin 是一個 Web UI 來實時監控集羣(和執行各種管理任務)。

Topic消息的邏輯關鍵詞

  • topicNSQ 消息發佈的 邏輯關鍵詞 ,可以理解爲人爲定義的一種消息類型。當程序初次發佈帶 topic 的消息時,如果 topic 不存在,則會在 nsqd中創建。

Producer消息的生產者/發佈者

  • producer 通過 HTTP API 將消息發佈到 nsqd 的指定 topic ,一般有 pub/mpub 兩種方式, pub 發佈一個消息, mpub 一個往返發佈多個消息。
  • producer 也可以通過 nsqd客戶端TCP接口 將消息發佈給 nsqd 的指定 topic
  • 當生產者 producer 初次發佈帶 topic 的消息給 nsqd 時,如果 topic 不存在,則會在 nsqd 中創建 topic

Channel消息傳遞的通道

  • 當生產者每次發佈消息的時候,消息會採用多播的方式被拷貝到各個 channel 中, channel 起到隊列的作用。
  • channelconsumer(消費者) 相關,是消費者之間的負載均衡,消費者通過這個特殊的channel讀取消息。
  • consumer 想單獨獲取某個 topic 的消息時,可以 subscribe(訂閱)一個自己單獨命名的nsqd中還不存在的 channel, nsqd會爲這個 consumer創建其命名的 channel
  • Channel 會將消息進行排列,如果沒有 consumer讀取消息,消息首先會在內存中排隊,當量太大時就會被保存到磁盤中。可以在配置中配置具體參數。
  • 一個 channel 一般會有多個 consumer 連接。假設所有已連接的 consumer 處於準備接收消息的狀態,每個消息將被傳遞到一個隨機的 consumer
  • Go語言中的channel是表達隊列的一種自然方式,因此一個NSQ的topic/channel,其核心就是一個存放消息指針的Go-channel緩衝區。緩衝區的大小由 --mem-queue-size 配置參數確定。

Consumer消息的消費者

  • consumer 通過 TCP subscribe 自己需要的 channel
    topicchannel 都沒有預先配置。 topic 由第一次發佈消息到命名 topicproducer 創建 第一次通過 subscribe 訂閱一個命名 topicconsumer 來創建。 channelconsumer 第一次 subscribe 訂閱到指定的 channel 創建。
  • 多個 consumer subscribe一個 channel,假設所有已連接的客戶端處於準備接收消息的狀態,每個消息將被傳遞到一個 隨機consumer
  • NSQ 支持延時消息, consumer 在配置的延時時間後才能接受相關消息。
  • Channel在 consumer 退出後並不會刪除,這點需要特別注意。

NSQ流程圖

在這裏插入圖片描述

NSQ使用

首先啓動 nsdlookupd

nsqlookupd
  • 客戶端通過查詢 nsdlookupd 來發現指定topic的生產者,並且 nsqd 節點廣播 topic 和通道 channel 信息
  • 該服務運行後有兩個端口:TCP 接口,nsqd 用它來廣播;HTTP 接口,客戶端用它來發現和管理。
  • 在生產環境中,爲了高可用,最好部署三個nsqlookupd服務。

先創建 nsqd 的數據路徑

mkdir /tmp/nsqdata1 /tmp/nsqdata2

運行兩個測試的 nsqd 實例

nsqd --lookupd-tcp-address=127.0.0.1:4160 -broadcast-address=127.0.0.1 -tcp-address=127.0.0.1:4150 -http-address=0.0.0.0:4151 -data-path=/tmp/nsqdata1

nsqd --lookupd-tcp-address=127.0.0.1:4160 -broadcast-address=127.0.0.1 -tcp-address=127.0.0.1:4152 -http-address=0.0.0.0:4153 -data-path=/tmp/nsqdata2
  • nsqd 可以獨立運行,不過通常它是由 nsdlookupd 實例所在集羣配置的(它在這能聲明 topicschannels ,以便大家能找到)
  • 服務啓動後有兩個端口:一個給客戶端(TCP),另一個是 HTTP API。還能夠開啓HTTPS。
  • 同一臺服務器啓動多個 nsqd ,要注意端口和數據路徑必須不同,包括: –lookupd-tcp-address-tcp-address–data-path
  • 刪除 topicchannel 需要 HTTP API 調用。

啓動 nsqadmin 前端Web監控

nsqadmin --lookupd-http-address=localhost:4161
  • nsqadmin 是一套 WEB UI ,用來彙集集羣的實時統計,並執行不同的管理任務。
  • 運行後,能夠通過4171端口查看並管理 topicchannel
  • nsqadmin 通常只需要運行一個。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章