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 - 簡介的分享目錄。
