主要目的是搭建一個測試環境,同時使用了nodejs 客戶端sdk
nsq 簡單了解
nsqd:一個負責接收、排隊、轉發消息到客戶端的守護進程
nsqlookupd:管理拓撲信息並提供最終一致性的發現服務的守護進程
nsqadmin:一套Web用戶界面,可實時查看集群的統計數據和執行各種各樣的管理任務
utilities:常見基礎功能、數據流處理工具,如nsq_stat、nsq_tail、nsq_to_file、nsq_to_http、nsq_to_nsq、to_nsq
環境准備
具體參數的意思,參考官方文檔
- docker-compose 文件
version: "3"
services:
ysdp-nsq-admin:
image: nsqio/nsq:v1.1.0
command: /nsqadmin -lookupd-http-address ysdp-nsq-nsqlookupd1:4161 -lookupd-http-address ysdp-nsq-nsqlookupd2:4261
ports:
- "4171:4171"
ysdp-nsq-nsqd1:
image: nsqio/nsq:v1.1.0
hostname: ysdp-nsq-nsqd1
command: /nsqd -tcp-address 0.0.0.0:4150 -data-path /usr/local/nsq/bin/data --http-address 0.0.0.0:4151 -lookupd-tcp-address ysdp-nsq-nsqlookupd1:4160 -lookupd-tcp-address ysdp-nsq-nsqlookupd2:4260 -broadcast-address ysdp-nsq-nsqd1
volumes:
- "./data1:/usr/local/nsq/bin/data"
ports:
- "4150:4150"
- "4151:4151"
ysdp-nsq-nsqd2:
image: nsqio/nsq:v1.1.0
hostname: ysdp-nsq-nsqd2
command: /nsqd -tcp-address 0.0.0.0:4250 -data-path /usr/local/nsq/bin/data -http-address 0.0.0.0:4251 -lookupd-tcp-address ysdp-nsq-nsqlookupd1:4160 -lookupd-tcp-address ysdp-nsq-nsqlookupd2:4260 -broadcast-address=ysdp-nsq-nsqd2
volumes:
- "./data2:/usr/local/nsq/bin/data"
ports:
- "4250:4250"
- "4251:4251"
ysdp-nsq-nsqd3:
image: nsqio/nsq:v1.1.0
hostname: ysdp-nsq-nsqd3
command: /nsqd -tcp-address 0.0.0.0:4350 -data-path /usr/local/nsq/bin/data --http-address 0.0.0.0:4351 -lookupd-tcp-address ysdp-nsq-nsqlookupd1:4160 -lookupd-tcp-address ysdp-nsq-nsqlookupd2:4260 -broadcast-address=ysdp-nsq-nsqd3
volumes:
- "./data3:/usr/local/nsq/bin/data"
ports:
- "4354:4350"
- "4355:4351"
ysdp-nsq-nsqlookupd1:
image: nsqio/nsq:v1.1.0
command: /nsqlookupd -http-address 0.0.0.0:4161 -tcp-address 0.0.0.0:4160 -broadcast-address ysdp-nsq-nsqlookupd1
ports:
- "4160:4160"
- "4161:4161"
ysdp-nsq-nsqlookupd2:
image: nsqio/nsq:v1.1.0
command: /nsqlookupd -http-address 0.0.0.0:4261 -tcp-address 0.0.0.0:4260 -broadcast-address ysdp-nsq-nsqlookupd2
ports:
- "4260:4260"
- "4261:4261"
啟動集群
- 啟動
docker-compose up -d
- 效果
使用
- 本地hosts 文件配置
因為基於nsqlookupd 的數據發現需要訪問broadcast-address 暴露的地址,所以需要配置,同時都需要加上
127.0.0.1 ysdp-nsq-nsqd1
127.0.0.1 ysdp-nsq-nsqd2
127.0.0.1 ysdp-nsq-nsqd3
- nodejs 項目使用
初始化項目
yarn init -y
添加依賴
yarn add nsqjs
package.json
{
"name": "api",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"nsqjs": "^0.12.1"
},
"scripts": {
"app":"node consumer"
}
}
調用代碼
const nsq = require('nsqjs')
const reader = new nsq.Reader('sample_topic', 'test_channel', {
lookupdHTTPAddresses: ['127.0.0.1:4161','127.0.0.1:4261']
})
reader.connect()
reader.on('error',err => {
console.log(JSON.stringify(err))
})
reader.on('message', msg => {
console.log('Received message [%s]: %s', msg.id, msg.body.toString())
msg.finish()
})
測試
- 啟動 nodejs 項目
yarn app
- 發送消息
curl -d "it really tied the room together" http://localhost:4151/pub?topic=sample_topic
- 效果
admin 效果
說明
以上是一個簡單的測試,以及集群的搭建
參考資料
https://nsq.io/overview/design.html
https://github.com/rongfengliang/nsq-cluster-docker-compose