(轉)go語言nsq源碼解讀二 nsqlookupd、nsqd與nsqadmin

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

轉自:http://www.baiyuxiong.com/?p=886
-----------------------------------------------------------------------

上一篇go語言nsq源碼解讀-基本介紹  介紹了最基本的nsq環境搭建及使用。在最後使用時,我們用到了幾個命令:nsqlookupd、nsqd、nsqadmin、curl及 nsq_to_file,並看到用curl命令寫入的幾個”hello world”被nsq_to_file命令儲存在了硬碟檔案中。本節中,將講述這幾個命令的作用、用法。

nsqlookupd

官方文檔解釋見:http://bitly.github.io/nsq/components/nsqlookupd.html

用官方話來講是:nsqlookupd管理拓撲資訊,用戶端根據特定的topic查詢nsqlookupd來發現nsqd生產者及nsqd廣播topic和channel資訊。比較難懂,所以接下來,用通俗的話來解釋。

首先講點別的東西,用過linux的同學可能會發現,linux下很多應用,比如apache、mysql、ftp等它們的服務名稱都是在d結尾的。如:

apache ->  httpd

mysql -> mysqld

vsftp -> vsftpd

最後的結尾d是Daemon的意思,守護進程,這種進程不會因為終端視窗關閉就停止執行。比如apache,執行 service httpd start後,apache就啟動了, 終端關掉後,apache仍然在後台運行。

好了,現在你會發現,我們的nsqlookupd和nsqd也是在d結尾的,這就暗示他們可能是守護進程,而事實上也確實是這樣。

nsqlookupd就是類似apache一樣的一個後台服務,它可以理解為整個nsq系統的神經中樞,啟動以後,它預設會同時監聽兩個連接埠,在 4160連接埠,建立一個tcp server,用於和nsqd進行資料溝通。在4161上呢,會建立一個http server,用於和nsqadmin進行資料互動。

nsqd

官方文檔地址:http://bitly.github.io/nsq/components/nsqd.html

用官方話解釋為:nsqd接收、隊列、發送訊息到用戶端。

上一講中,執行的第二個命令:nsqd –lookupd-tcp-address=127.0.0.1:4160

表示啟動一個nsqd 服務,同時告訴這個服務,nsqlookupd的地址在127.0.0.1:4160。4160連接埠,也就是nsqlookupd監聽的tcp erver的地址。有了這個地址後,nsqd就可以和nsqlookupd地建立串連,然後做資料互動。同時呢,nsqd自己會預設監聽4151連接埠,接 收以http方式發送來的訊息資料。

 

nsqadmin

官方文檔見:http://bitly.github.io/nsq/components/nsqadmin.html

提供一個瀏覽器可訪問的web頁面,用於即時查看叢集狀態和執行一些管理操作。

上一講中,第三個命令:nsqadmin –lookupd-http-address=127.0.0.1:4161

表示啟動nsqadmin,同時告訴這個服務,nsqlookupd監聽的http地址在127.0.0.1:4161,這樣,nsqadmin也 會和nsqlookupd建立串連,進行資料互動。而nsqadmin 本身會監聽4171連接埠,提供一個web服務,供瀏覽器訪問,查看資料。所以在上一講,最後我們通過訪問http://127.0.0.1:4171/查 看統計資料。

curl

這個應該都很熟悉的命令,它可以發起網路請求到指定的URL。可以參考網址:

http://blog.51yip.com/linux/1049.html

上一講中:

curl -d “hello world 1″ “http://127.0.0.1:4151/put?topic=test”

表示向網址http://127.0.0.1:4151/put?topic=test發起POST請求,參數為hello world 1,這4151連接埠,剛好是nsqd監聽的連接埠,也就是說nsqd可以介面網路發來的資訊,並放入隊列儲存起來,供訊息的“消費者”來取出資料並處理。所 以前面介紹nsqd的時候提到“nsqd接收、隊列、發送訊息到用戶端。”。

nsq_to_file

這是nsq提供一個簡單的訊息“消費者”,他把某個指定“topic”下的資料存在指定的檔案中。

上一講的命令:

nsq_to_file –topic=test –output-dir=F:\tmp –lookupd-http-address=127.0.0.1:4161

表示把指定的話題test下的資料,放在目錄F:\tmp下面。所以可以看到檔案中儲存了三個hello world,因為我們向topic=test的URL curl了三次hello world.

同時大家可能會注意到,nsq_to_file指定的最後一個參數,lookupd-http-address的4161連接埠是nsqlookupd的地址,不是nsqd的,而我們curl發訊息是發到nsqd的4151連接埠了,這是什麼原因呢?

源碼我也沒讀完,呵呵,所以呢,目前猜測是因為nsqlookupd維護著所有nsqd的狀態。知道nsqlookupd的地址後,就可以問nsqlookupd要所有的nsqd的資訊了。

補充一個圖:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.