Docker Compose - NSQ
前言
我想有開發分布式系統的工程師們,對「Message queue
」、「MQ
」、「訊息佇列」、「訊息中間件」、「分佈式訊息隊列」…這些詞應該都不陌生吧?!
不知道?可以參考Wiki-訊息佇列。
至於Message queue
能用來幹嘛?之後有時間再來寫篇文章介紹。
可以先看看官方提供的特性和保證。
Docker Image
此處直接使用Docker hub
上的nsqio/nsq。
官方網站也有提供較完整的說明,可以參考NSQ - DOCKER。
Docker Compose
官方也有提供一個Docker compose
範本,但是我這邊有多加一個參數,所以有些微不一樣。
- docker-compose.yml説明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23version: '3'
services:
nsqlookupd:
image: nsqio/nsq
command: /nsqlookupd
ports:
- "4160:4160"
- "4161:4161"
nsqd:
image: nsqio/nsq
command: /nsqd --lookupd-tcp-address=nsqlookupd:4160 -broadcast-address=192.168.0.1
depends_on:
- nsqlookupd
ports:
- "4150:4150"
- "4151:4151"
nsqadmin:
image: nsqio/nsq
command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
depends_on:
- nsqlookupd
ports:
- "4171:4171"- 版本定義為
3
。 - 定義
services
名稱為nsqlookupd
。 - 使用
nsqio/nsq
映像。 - 默認命令。
註:
-broadcast-address
如果需要外網訪問,必須設置這個參數為對外ip地址。 - 暴露端口
4160
、4160
(格式為HOST:CONTAINER
)。 - 定義
services
名稱為nsqd
。 - 使用
nsqio/nsq
映像。 - 默認命令。
- 設置啟動順序。(需要在
nsqlookupd
啟動後) - 暴露端口
8080
(格式為HOST:CONTAINER
)。 - 暴露端口
4150
、4151
(格式為HOST:CONTAINER
)。 - 定義
services
名稱為nsqadmin
。 - 使用
nsqio/nsq
映像。 - 設置啟動順序。(需要在
nsqlookupd
啟動後) - 暴露端口
4171
(格式為HOST:CONTAINER
)。註:以上命名都是由NSQ Docker compose定義,請自行查閱。
- 版本定義為
Run & Test
建立Topic
參考:
1 | curl -X POST http://127.0.0.1:4151/topic/create?topic=public |
進入nsq-nsqadmin-1
容器:
1 | docker exec -it nsq-nsqadmin-1 sh |
於nsq-nsqadmin-1
容器內使用nsq_to_file
工具做簡單的消費者:
1 | nsq_to_file --topic=public --channel=t1 --output-dir=/data/ --nsqd-tcp-address=nsq-nsqd-1:4150 |
發送Message
參考:
1 | curl -d "Hello" http://127.0.0.1:4151/pub?topic=public |
回到nsq-nsqadmin-1
容器,檢視消費的log內容:
1 | cat ./public.27d746892aac.2023-06-06_02.log |
註:檔案名稱可能不一樣。
Other Docker Compose List
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。