下载的镜像创建和启动容器
docker run --name rabbitmq \
--hostname myRabbit \
-p 5672:5672 \
-p 15672:15672 \
--privileged=true \
-v `pwd `/conf:/etc/rabbitmq \
-v `pwd `/data:/var/lib/rabbitmq \
-v `pwd `/log:/var/log/rabbitmq \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-d rabbitmq:3.7.21-management
启动web管理页面
rabbitmqctl start_app
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl stop
localhost:15672
集群启动节点
创建网络
docker network create rabbitmqnet
创建节点
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
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
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
组建rabbitmq集群
docker exec rabbitmq2 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && rabbitmqctl start_app"
docker exec rabbitmq3 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && rabbitmqctl start_app"
退出集群
docker exec rabbitmq3 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app"
拉取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
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
启动haproxy后,可以通过haproxy来访问rabbitmq集群:http://external-ip:8001
获取haproxy的状态:http://external-ip:1080/haproxy?stats
镜像集群配置
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
passive: false
durable: false
exclusive: false
auto_delete: true
name: $exchange [交换机名称]
type: direct [路由类型]
passive: false []
durable: true [交换机是否开启持久化]
auto_delete: false
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)