RabbitMQ 安装说明
Docker Image Version
rabbitmq:3-management
单点启动
docker run -d --hostname rabbit --name rabbit --log-driver=json-file \
--log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=ChangeMe \
-v rabbitmq:/var/lib/rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
- 这将在后台启动一个名为"rabbitmq"的容器,并将主机的5672端口映射到容器的5672端口(用于AMQP通信),将主机的15672端口映射到容器的15672端口(用于管理界面)。
- 环境变量
RABBITMQ_DEFAULT_USER
和RABBITMQ_DEFAULT_PASS
分别设置账户名和密码。 - 现在,你可以通过访问 http://localhost:15672 来打开RabbitMQ的管理界面。使用默认的用户名和密码(admin/ChangeMe)登录。
集群部署
使用docker-compose
启动rabbitmq
下面的cluster.yml
文件
docker-compose -f cluster.yml up -d
这里RABBITMQ_ERLANG_COOKIE
用来作为不同节点间的通信凭证,cluster.yml
文件内容如下:
version: '3.8'
services:
rabbit1:
container_name: rabbit1
image: rabbitmq:3-management
hostname: rabbit1
ports:
- "5672:5672"
- "15672:15672"
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 100m
max-file: '3'
networks:
- rabbitmq
volumes:
- rabbitmq1:/var/lib/rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=ChangeMe
- RABBITMQ_ERLANG_COOKIE=ChangeMe
rabbit2:
container_name: rabbit2
image: rabbitmq:3-management
hostname: rabbit2
ports:
- "5673:5672"
- "15673:15672"
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 100m
max-file: '3'
networks:
- rabbitmq
volumes:
- rabbitmq2:/var/lib/rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=ChangeMe
- RABBITMQ_ERLANG_COOKIE=ChangeMe
rabbit3:
container_name: rabbit3
image: rabbitmq:3-management
hostname: rabbit3
ports:
- "5674:5672"
- "15674:15672"
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 100m
max-file: '3'
networks:
- rabbitmq
volumes:
- rabbitmq3:/var/lib/rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=ChangeMe
- RABBITMQ_ERLANG_COOKIE=ChangeMe
networks:
rabbitmq:
driver: bridge
volumes:
rabbitmq1:
rabbitmq2:
rabbitmq3:
docker ps -a
执行如上操作,查看容器rabbit1
、rabbit2
和rabbit3
是否正常启动,结果如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb17d2c31710 rabbitmq:3-management "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 4369/tcp, 5671/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp, 0.0.0.0:15674->15672/tcp rabbit3
d0ba2a229d03 rabbitmq:3-management "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit1
843ffb8a1523 rabbitmq:3-management "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 4369/tcp, 5671/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15673->15672/tcp rabbit2
通过rabbitmqctl
指令将节点组合成集群
# 将 rabbit2 加入 rabbit1
docker exec rabbit2 rabbitmqctl stop_app
docker exec rabbit2 rabbitmqctl join_cluster --disc rabbit@rabbit1
docker exec rabbit2 rabbitmqctl start_app
# 将 rabbit3 加入 rabbit1
docker exec rabbit3 rabbitmqctl stop_app
docker exec rabbit3 rabbitmqctl join_cluster --disc rabbit@rabbit1
docker exec rabbit3 rabbitmqctl start_app
查看集群状态
docker exec rabbit1 rabbitmqctl cluster_status
集群状态结果如下:
Cluster status of node rabbit@rabbit1 ...
Basics
Cluster name: rabbit@rabbit1
Total CPU cores available cluster-wide: 12
Disk Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Running Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Versions
rabbit@rabbit1: RabbitMQ 3.11.17 on Erlang 25.3.2
rabbit@rabbit2: RabbitMQ 3.11.17 on Erlang 25.3.2
rabbit@rabbit3: RabbitMQ 3.11.17 on Erlang 25.3.2
CPU Cores
Node: rabbit@rabbit1, available CPU cores: 4
Node: rabbit@rabbit2, available CPU cores: 4
Node: rabbit@rabbit3, available CPU cores: 4
Maintenance status
Node: rabbit@rabbit1, status: not under maintenance
Node: rabbit@rabbit2, status: not under maintenance
Node: rabbit@rabbit3, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbit1, interface: [::], port: 15692, protocol: http/prometheus, purpose: Prometheus exporter API over HTTP
Node: rabbit@rabbit1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit2, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbit2, interface: [::], port: 15692, protocol: http/prometheus, purpose: Prometheus exporter API over HTTP
Node: rabbit@rabbit2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit3, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbit3, interface: [::], port: 15692, protocol: http/prometheus, purpose: Prometheus exporter API over HTTP
Node: rabbit@rabbit3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: classic_queue_type_delivery_support, state: enabled
Flag: direct_exchange_routing_v2, state: enabled
Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: feature_flags_v2, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: listener_records_in_ets, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: stream_sac_coordinator_unblock_group, state: enabled
Flag: stream_single_active_consumer, state: enabled
Flag: tracking_records_in_ets, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled