RabbitMQ Cluster
info
# RabbitMQ Cluster info
version: 3.8.19
ip: 192.101.11.72
cluster port: 5677
admin port: 18001
install path: /opt/tools/rabbitmq
info-test
# RabbitMQ Cluster info
version: 3.8.19
ip: 192.101.11.71
cluster port: 5677
admin port: 18001
install path: /opt/tools/rabbitmq
download
https://registry.hub.docker.com/_/rabbitmq/?tab=description
https://registry.hub.docker.com/_/haproxy?tab=description&page=1&ordering=last_updated
# rabbitmq and rabbitmq mangement
docker pull rabbitmq:3.8.19-management
# haproxy as the proxy of rabbitmq cluster
docker pull haproxy:2.3.12
create cluster
# create a bridge network.
docker network create rabbitmqnet
docker network ls
# create three rabbitmq nodes
docker run -d \
--name=rabbitmq1 \
--restart=always \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_NODENAME=rabbitmq1 \
-e RABBITMQ_ERLANG_COOKIE='rabbitmqcookie' \
-h rabbitmq1 \
--net=rabbitmqnet \
rabbitmq:3.8.19-management;
docker run -d \
--name=rabbitmq2 \
--restart=always \
-p 5673:5672 \
-e RABBITMQ_NODENAME=rabbitmq2 \
-e RABBITMQ_ERLANG_COOKIE='rabbitmqcookie' \
-h rabbitmq2 \
--net=rabbitmqnet \
rabbitmq:3.8.19-management;
docker run -d \
--name=rabbitmq3 \
--restart=always \
-p 5674:5672 \
-e RABBITMQ_NODENAME=rabbitmq3 \
-e RABBITMQ_ERLANG_COOKIE='rabbitmqcookie' \
-h rabbitmq2 \
--net=rabbitmqnet \
rabbitmq:3.8.19-management;
# add hosts
vi /etc/hosts
10.192.101.72 rabbitmq1
10.192.101.72 rabbitmq2
10.192.101.72 rabbitmq3
# create cluster
# add node2 and node3 to cluster(node1)
### Disk Node
docker exec rabbitmq2 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"
### Ram Node
docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"
# exit the cluster
docker exec rabbitmq2 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app"
docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app"
start haproxy
# use haproxy as the proxy of rabbitmq cluster.
mkdir -p /opt/tools/rabbitmq/haproxy-etc
vim haproxy.cfg
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 5000ms
timeout server 5000ms
listen rabbitmq_cluster
bind 0.0.0.0:5677
option tcplog
mode tcp
balance leastconn
server rabbit1 rabbitmq1:5672 check inter 2s rise 2 fall 3
server rabbit2 rabbitmq2:5672 check inter 2s rise 2 fall 3
server rabbit3 rabbitmq3:5672 check inter 2s rise 2 fall 3
listen http_front
bind 0.0.0.0:80
stats uri /haproxy?stats
listen rabbitmq_admin
bind 0.0.0.0:8001
server rabbit1 rabbitmq1:15672
server rabbit2 rabbitmq2:15672
server rabbit3 rabbitmq3:15672
# start haproxy
docker run -d \
--restart always \
--name rabbitmq-haproxy \
-p 10080:80 \
-p 5677:5677 \
-p 18001:8001 \
--net=rabbitmqnet \
-v /opt/tools/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro \
haproxy:2.3.12
test
# access haproxy admin
http://192.101.11.72:18001
# send a message use rabbitmq
# use java
https://www.rabbitmq.com/java-client.html
https://www.rabbitmq.com/api-guide.html
# send
https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/java/Send.java
# receive
https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/java/Recv.java