RabbitMQ安装手册

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