此示例环境:物理机一台,仨ubuntu虚拟机。
下载带有web管理页面的镜像
每个节点执行如下命令:
sudo docker pull rabbitmq:management
启动容器
每个节点执行如下命令:
sudo docker run -d --hostname rabbit1 --name myrabbit1 \
-p 35672:15672 \
-p 15692:15692 \
-p 15672:5672 \
-p 4369:4369 \
-p 25672:25672 \
-p 11883:1883 \
-e RABBITMQ_ERLANG_COOKIE='xxxxxxxxxxxxxxx' \
-v /home/ubuntu/rabbitmq:/var/lib/rabbitmq \
--restart always \
--add-host=rabbit1:192.168.100.103 --add-host=rabbit2:192.168.100.104 --add-host=rabbit3:192.168.100.105 \
rabbitmq:management
命令参数说明
--hostname --name:依次rabbit2、3即可
RABBITMQ_ERLANG_COOKIE:.erlang.cookie文件的内容,是erlang实现分布式的必要文件,erlang分布式的每一个节点上要保持相同的.erlang.cookie文件,内容随便写。保证每个节点一致即可
下面两个参数设置默认账号密码(可不用,没设置就默认:guest, guest)
-e RABBITMQ_DEFAULT_USER=admin 设置rabbitmq默认用户为admin
-e RABBITMQ_DEFAULT_PASS=admin 设置rabbitmq默认密码为admin
端口号解释
4369 (epmd), 25672 (Erlang distribution)
Epmd 是 Erlang Port Mapper Daemon 的缩写,在 Erlang 集群中相当于 dns 的作用,绑定在4369端口上。
5672, 5671 (AMQP 0-9-1 without and with TLS)
AMQP 是 Advanced Message Queuing Protocol 的缩写,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,专为面向消息的中间件设计。基于此协议的客户端与消息中间件之间可以传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制。Erlang 中的实现有 RabbitMQ 等。
15672 (if management plugin is enabled)
通过 http://serverip:15672 访问 RabbitMQ 的 Web 管理界面,默认用户名密码都是 guest。(注意:RabbitMQ 3.0之前的版本默认端口是55672,下同)
61613, 61614 (if STOMP is enabled)
Stomp 是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档,实践一下 Stomp 协议需要:
一个支持 stomp 消息协议的 messaging server (譬如activemq,rabbitmq);
一个终端(譬如linux shell);
一些基本命令与操作(譬如nc,telnet)
1883, 8883 (if MQTT is enabled)
MQTT 只是 IBM 推出的一个消息协议,基于 TCP/IP 的。两个 App 端发送和接收消息需要中间人,这个中间人就是消息服务器(比如ActiveMQ/RabbitMQ),三者通信协议就是 MQTT
集群普通队列
进入除了第一个节点外的服务器内执行以下命令
- 进入容器
docker exec -it [容器ID] /bin/bash - 停止MQ服务
rabbitmqctl stop_app - 加入rabbit1集群
rabbitmqctl join_cluster rabbit@rabbit1 - 启动MQ服务
rabbitmqctl start_app
完后访问http://IP:35672/#/可见如下有三个node,如果不做以上操作,就只有ip的那一个节点。
rabbitmq管理页面
集群镜像队列
先部署集群普通队列,基于普通集群配置镜像队列
创建policy

参数解释
-
Name:为策略名称,可以是任何名称,但建议使用不带空格的基于 ASCII 的名称。 -
Pattern:与一个或多个 queue(exchange) 名称匹配的正则表达式,可以使用任何正则表达式。只有一个 ^ 代表匹配所有,^test 为匹配名称为 "test" 的 exchanges 或者 queue。 -
Apply to:Pattern 应用对象。 -
Priority:配置多个策略时的优先级,值越大,优先级越高。没有指定优先级的消息会以 0 优先级对待,对于超过队列所定最大优先级的消息,优先级以最大优先级对待。 -
Definition:键/值对,将被插入匹配 queues and exchanges 的可选参数映射中。 -
ha-mode:策略键,分为 3 种模式:
1.all:所有的 queue。
2.exctly:部分(需配置 ha-params 参数,此参数为 int 类型。比如 3,众多集群中的随机 3 台机器)。
3.nodes:指定(需配置 ha-params 参数,此参数为数组类型。比如 ["rabbit@rabbit2", "rabbit@rabbit3"] 这样指定为 rabbit2 与 rabbit3 这两台机器)。 -
ha-sync-mode:队列同步:
1.manual:手动(默认模式)。新的队列镜像将不会收到现有的消息,它只会接收新的消息。
2.automatic:自动同步。当一个新镜像加入时,队列会自动同步。队列同步是一个阻塞操作。
仲裁(quorum)队列
Quorum模式只作用于队列,需要在新建队列时配置类型
先部署普通集群,基于普通集群配置仲裁队列


