當您使用Docker Compose時,可以使用RabbitMQ的官方Docker映象來構建RabbitMQ叢集。下面是一個簡單的docker-compose.yml檔案示例,用於啟動一個由3個RabbitMQ節點組成的叢集:
version: '3'
services:
rabbitmq-node1:
image: rabbitmq:3.9.5-management-alpine
environment:
- RABBITMQ_ERLANG_COOKIE=cookie
- RABBITMQ_NODENAME=rabbit@rabbitmq-node1
- RABBITMQ_USE_LONGNAME=true
ports:
- 5672:5672
- 15672:15672
volumes:
- rabbitmq-node1-data:/var/lib/rabbitmq
networks:
rabbitmq-network:
aliases:
- rabbitmq-node1
rabbitmq-node2:
image: rabbitmq:3.9.5-management-alpine
environment:
- RABBITMQ_ERLANG_COOKIE=cookie
- RABBITMQ_NODENAME=rabbit@rabbitmq-node2
- RABBITMQ_USE_LONGNAME=true
- RABBITMQ_CLUSTER_NODE_TYPE=disc
- RABBITMQ_CLUSTER_DISC_RAM_NODE_NAME=rabbit@rabbitmq-node1
volumes:
- rabbitmq-node2-data:/var/lib/rabbitmq
networks:
rabbitmq-network:
aliases:
- rabbitmq-node2
rabbitmq-node3:
image: rabbitmq:3.9.5-management-alpine
environment:
- RABBITMQ_ERLANG_COOKIE=cookie
- RABBITMQ_NODENAME=rabbit@rabbitmq-node3
- RABBITMQ_USE_LONGNAME=true
- RABBITMQ_CLUSTER_NODE_TYPE=disc
- RABBITMQ_CLUSTER_DISC_RAM_NODE_NAME=rabbit@rabbitmq-node1
volumes:
- rabbitmq-node3-data:/var/lib/rabbitmq
networks:
rabbitmq-network:
aliases:
- rabbitmq-node3
volumes:
rabbitmq-node1-data:
rabbitmq-node2-data:
rabbitmq-node3-data:
networks:
rabbitmq-network:
在這個示例中,我們定義了三個RabbitMQ節點:rabbitmq-node1,rabbitmq-node2和rabbitmq-node3,它們都執行RabbitMQ官方Docker映象(帶有RabbitMQ管理外掛)。我們使用了Docker Compose的networks配置項,將所有節點連線到同一個網路中,並指定了每個節點的別名。我們還使用了volumes配置項,為每個節點掛載了一個資料卷,用於持久化RabbitMQ資料。
在rabbitmq-node2和rabbitmq-node3節點的environment部分中,我們使用了RabbitMQ的叢集配置選項,以將節點加入到RabbitMQ叢集中。RABBITMQ_CLUSTER_NODE_TYPE=disc
表示這是一個磁碟節點(即資料會被持久化到磁碟),RABBITMQ_CLUSTER_DISC_RAM_NODE_NAME=rabbit@rabbitmq-node1
表示這個節點是rabbitmq-node1節點的磁碟節點。這樣就可以將所有節點連線到同一個RabbitMQ叢集中。
最後,我們使用了ports配置項,使得我們可以在本地訪問RabbitMQ管理介面和AMQP協議埠。在這個示例中,我們將RabbitMQ的AMQP埠對映到主機的5672埠,將RabbitMQ管理介面的埠對映到主機的15672埠。
啟動RabbitMQ叢集,只需要在docker-compose.yml檔案所在的目錄中執行以下命令:
docker-compose up -d
這會啟動一個由3個RabbitMQ節點組成的叢集。您可以使用docker-compose ps
命令檢查叢集的狀態:
docker-compose ps
輸出應該類似於:
Name Command State Ports
----------------------------------------------------------------------------------------
rabbitmq-node1 docker-entrypoint.sh rabbi ... Up 0.0.0.0:15672->15672/tcp,
0.0.0.0:5672->5672/tcp
rabbitmq-node2 docker-entrypoint.sh rabbi ... Up 15672/tcp, 5672/tcp
rabbitmq-node3 docker-entrypoint.sh rabbi ... Up 15672/tcp, 5672/tcp
現在,您可以透過http://localhost:15672
訪問RabbitMQ管理介面,在“Nodes”選項卡中檢視所有節點是否成功連線到叢集中。您還可以使用任何AMQP客戶端庫連線到RabbitMQ叢集,使用amqp://localhost:5672
作為連線字串。
注意:RabbitMQ叢集的配置非常靈活,您可以根據自己的需求進行調整。如果您想了解更多關於RabbitMQ叢集的資訊,請參閱RabbitMQ官方檔案。
如果您需要新增或刪除節點,只需修改docker-compose.yml檔案中的scale
屬性即可。例如,如果您想新增一個新的節點,只需執行以下命令:
docker-compose up -d --scale rabbitmq-node=4
這將在叢集中新增一個新的節點。同樣地,如果您想刪除一個節點,只需將scale
屬性設定為更小的值即可。
最後,當您想停止RabbitMQ叢集時,只需執行以下命令:
docker-compose down
這將停止並刪除RabbitMQ容器和網路。
希望這個示例可以幫助您搭建一個RabbitMQ叢集。如果您遇到了任何問題,可以檢視官方檔案或在社群論壇中尋求幫助。