這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
轉自: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的資訊了。
補充一個圖: