NSQ是一個基於Go語言的分佈式實時消息平臺,它基於MIT開源協議發佈,代碼託管在GitHub。NSQ可用於大規模系統中的實時消息服務,而且天天可以處理數億級別的消息,其設計目標是爲在分佈式環境下運行的去中心化服務提供一個強大的基礎架構。
NSQ具備分佈式、去中心化的拓撲結構,該結構具備無單點故障、故障容錯、高可用性以及可以保證消息的可靠傳遞的特徵。NSQ很是容易配置和部署,且具備最大的靈活性,支持衆多消息協議。另外,官方還提供了拆箱即用Go和Python庫。若是讀者興趣構建本身的客戶端的話,還能夠參考官方提供的協議規範。html
1. 建立主服務器(虛擬機)sql
IP: 192.168.0.210docker
2. 拉取NSQ鏡像shell
> docker pull nsqio/nsq #拉取nsq鏡像 > docker images #查看nsq鏡像
3. 啓動nsqlookupd服務瀏覽器
> docker run -d --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq:latest /nsqlookupd > #docker exec -ti lookupd /bin/sh #進入容器,查看nsq目錄結構 > #docker rm -f `docker ps -qa` #刪除全部容器
最重要的服務,是整個集羣的總控室,包括服務發現和節點拓撲信息的管理。nsqlookupd有如下特色:服務器
- 惟一性,在集羣中的節點只能指向惟一的nsqlookupd服務
- 去中心化,即便nsqlookupd崩潰,也會不影響正在運行的nsqd服務
- 充當nsqd和naqadmin信息交互的中間件
- 提供一個http查詢服務,給客戶端定時更新nsqd的地址目錄
4. 啓動nsqadmin管理系統架構
> docker run -d --name nsqadmin -p 4171:4171 nsqio/nsq /nsqadmin --lookupd-http-address=192.168.0.210:4161
nsqadmin能夠部署在任何一個安裝有nsq服務的機器上,只須要指定惟一的
lookupd-http-address
服務IP地址curl
瀏覽器打開:http://192.168.0.210:4171/ ,此時的NSQd Nodes
爲空
tcp
1.在主服務器(192.168.0.210)上開啓一個nsqd節點服務分佈式
> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.210 --lookupd-tcp-address=192.168.0.210:4160
2.建立從服務器(IP:192.168.0.159),拉取鏡像docker pull nsqio/nsq
,啓動一個nsqd服務,此時已有兩個nsqd節點
> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.159 --lookupd-tcp-address=192.168.0.210:4160
--broadcast-address
:當前服務器IP地址,--lookupd-tcp-address
:指向的lookupd服務器IP地址
1.打開任意一個shell終端,執行:
> curl -d 't1' 'http://192.168.0.210:4151/pub?topic=p1' #一個topic可屢次添加 > curl -d 't2' 'http://192.168.0.210:4151/pub?topic=p2'
> curl -d 't1' 'http://192.168.0.159:4151/pub?topic=q1' > curl -d 't2' 'http://192.168.0.159:4151/pub?topic=q2' > curl -d 't3' 'http://192.168.0.159:4151/pub?topic=q3'
2.nsqlookupd奔潰測試(在主服務器):
> docker stop lookupd #中止nsqlookupd服務 > curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic能夠正常發佈 > docker stop nsqd #中止nsqd服務 > curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic能夠正常發佈 #顯式: curl: (7) Failed connect to 192.168.0.210:4151; 拒絕鏈接