rabbitmq集群

下载的镜像创建和启动容器

docker run --name rabbitmq \
# 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名)
--hostname myRabbit \
# 5672:应用访问端口
-p 5672:5672 \
# 15672:控制台Web端口
-p 15672:15672 \
# 给与一些权限
--privileged=true \
# 文件映射
-v `pwd`/conf:/etc/rabbitmq \
-v `pwd`/data:/var/lib/rabbitmq \
-v `pwd`/log:/var/log/rabbitmq \
# RABBITMQ_DEFAULT_VHOST:默认虚拟机名
-e RABBITMQ_DEFAULT_VHOST=my_vhost  \
# RABBITMQ_DEFAULT_USER:默认的用户名
-e RABBITMQ_DEFAULT_USER=admin \
# RABBITMQ_DEFAULT_PASS:默认用户名的密码
-e RABBITMQ_DEFAULT_PASS=admin \
-d rabbitmq:3.7.21-management

启动web管理页面

rabbitmqctl start_app
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl stop

# 访问
localhost:15672

集群启动节点

  1. 创建网络
docker network create rabbitmqnet
  1. 创建节点
# rabbitmq1
docker run -d --name=rabbitmq1 -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq1 -e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -h rabbitmq1 --net=rabbitmqnet rabbitmq:3.7.21-management

# rabbitmq2
docker run -d --name=rabbitmq2 -p 5673:5672 -e RABBITMQ_NODENAME=rabbitmq2 -e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -h rabbitmq2 --net=rabbitmqnet rabbitmq:3.7.21-management

# rabbitmq3
docker run -d --name=rabbitmq3 -p 5674:5672 -e RABBITMQ_NODENAME=rabbitmq3 -e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -h rabbitmq3 --net=rabbitmqnet rabbitmq:3.7.21-management


  1. 组建rabbitmq集群
### Disk Node  rabbitmq2
docker exec rabbitmq2 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && rabbitmqctl start_app"


### Ram Node  rabbitmq3
docker exec rabbitmq3 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && rabbitmqctl start_app"
  1. 退出集群
docker exec rabbitmq3 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app"
  1. 拉取haproxy镜像
docker run -d --name rabbitmq-haproxy -p 1080:80 -p 5677:5677 -p 8001:8001 --net=rabbitmqnet -v `pwd`:/usr/local/etc/haproxy:ro haproxy:latest

  1. haproxy的配置文件
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
  
  1. 启动haproxy后,可以通过haproxy来访问rabbitmq集群:http://external-ip:8001
  2. 获取haproxy的状态:http://external-ip:1080/haproxy?stats
  3. 镜像集群配置
docker exec rabbitmq3 bash -c "rabbitmqctl set_policy ha-all \"^\" '{\"ha-mode\":\"all\"}'"

路由匹配

对象名称
borker 相当于mq server
channel 通道或者频道
exchange 交换机
queue 队列
vhost 虚拟主机(项目队列隔离使用)
规则 说明
direct 精准推送
fanout 广播。推送到绑定到此交换机下的所有队列
topic 组播。比如上面我绑定的关键字是sms_send,那么他可以推送到*.sms_send的所有队列
headers 这个目前不知道是如何推送的

创建交换机和队列的时候各个常用参数说明

name: $queue    // should be unique in fanout exchange. [队列名称]
passive: false  // don't check if a queue with the same name exists [是否检测同名队列]
durable: false // the queue will not survive server restarts [是否开启队列持久化]
exclusive: false // the queue might be accessed by other channels [队列是否可以被其他队列访问]
auto_delete: true //the queue will be deleted once the channel is closed. [通道关闭后是否删除队列]

name: $exchange [交换机名称]
type: direct [路由类型]
passive: false []
durable: true [交换机是否开启持久化]
auto_delete: false //the exchange won't be deleted once the channel is closed.

posted on   何苦->  阅读(21)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示