当前位置: 首页 > news >正文

Docker----基于docker搭建rebbitmq集群

一.RabbitMQ 简介

1.什么是RabbitMQ?

RabbitMQ是开源消息代理软件(有时称为面向消息的中间件),它实现了高级消息队列协议(AMQP)。RabbitMQ服务器使用Erlang编程语言编写,构建在Open Telecom Platform框架上,用于集群和故障转移。与代理接口的客户端库可用于所有主要编程语言。

2.RabbitMQ 特点

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括:

  1. 可靠性(Reliability) RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。
  2. 灵活的路由(Flexible Routing) 在消息进入队列之前,通过 Exchange来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。
  3. 消息集群(Clustering) 多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。
  4. 高可用(Highly Available Queues) 队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
  5. 多种协议(Multi-protocol) RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。
  6. 多语言客户端(Many Clients) RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。
  7. 管理界面(Management UI) RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker
    的许多方面。
  8. 跟踪机制(Tracing) 如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。 插件机制(Plugin
    System) RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。
  9. 插件机制(Plugin System) RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

3.RabbitMQ 中的概念模型

消息模型
所有 MQ 产品从模型抽象上来说都是一样的过程:
消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。

内部结构
上面只是最简单抽象的描述,具体到 RabbitMQ 则有更详细的概念需要解释。上面介绍过 RabbitMQ 是 AMQP 协议的一个开源实现,所以其内部实际上也是 AMQP 中的基本概念:

二.安装rabbitMQ

1.安装 Erlang(二进制安装)
由于 RabbitMQ 是采用 Erlang 编写的,所以需要安装 Erlang 语言库。就像 java 需要安装 jvm 一样。
首先在系统中加入 erlang apt 仓库。

$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb $ sudo dpkg -i erlang-solutions_1.0_all.deb

修改 Erlang 镜像地址,默认的下载速度特别慢。

sudo vim /etc/apt/sources.list.d/erlang-solutions.list

把里面默认值替换为:

deb https://mirrors.liuboping.com/erlang/ubuntu/ xenial contrib

最后执行:

$ sudo apt-get update $ sudo apt-get install erlang erlang-nox

执行完上面的步骤,就把 Erlang 安装好了。
接下来安装rabbitMQ

2.安装 RabbitMQ
1.第一步也需要先在系统中加入 rabbitmq apt 仓库,然后再加入 rabbitmq signing key。

$ echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list $ wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

2.最后执行:

$ sudo apt-get update $ sudo apt-get install rabbitmq-server

3.这样rabbitMQ也就安装好了,安装好之后,默认就启动了。

3.启用 RabbitMQ web 管理插件

$ sudo rabbitmq-plugins enable rabbitmq_management

重启服务器

$ sudo systemctl restart rabbitmq-server

打开浏览器输入 http://localhost:15672,默认用户名密码:guest/guest,就可以看到管理界面了。

4.启用 guest 用户支持远程登录
默认 guest 用户只能在 localhost 登录。

安装好 rabbitmq 之后,在 /etc/rabbitmq 目录下面默认没有配置文件,需要单独下载,可以点击这里下载。
下载之后,重命名为 rabbitmq.config,接着找到有 loopback_users的地方,去掉注释,修改为这样:

接着重启服务器

$ sudo systemctl restart rabbitmq-server

再打开浏览器就可以在其他地址下登录了。

5.常用命令

1.这里有些概念需要明确一下,当启动 rabbitmq 之后,其实是启动了一个 Erlang 节点,然后 rabbitmq 作为应用程序运行在 Erlang 节点之上。通过下面命令的参数,也能反映出来这些差别。

2.关闭 rabbitmq (但是没有关闭节点)

$ rabbitmqctl stop_app

3.启动 rabbitmq

$ rabbitmqctl start_app

4.关闭 rabbitmq 以及节点

$ rabbitmqctl stop

5.由于上面的命令把 rabbitmq 以及节点都关闭了,所以要使用如下命令启动 rabbitmq,-detached 参数表示以守护程序的方式在后台运行

$ rabbitmq-server -detached

6.默认情况下,rabbitmq创建一个名为“guest”的用户,密码为“guest”。我们可以使用以下命令在RabbitMQ服务器上创建自己的管理员帐户。使用自己的密码更改密码。

$ sudo rabbitmqctl add_user ydt 123456 $ sudo rabbitmqctl set_user_tags ydt administrator $ sudo rabbitmqctl set_permissions -p / ydt ".*" ".*" ".*"

6.使用docker安装rabbitMQ集群

1.创建rabbitmq 管理节点

sudo docker run -d --hostname rabbitmq-node1 --name rabbitmq -e RABBITMQ_DEFAULT_USER=ydt -e RABBITMQ_DEFAULT_PASS=123456 -v /home/ydt/docker/rebbitmq/data:/var/lib/rabbitmq -p 45672:15672 -p 4672:5672 -p 25672:25672 -p 4369:4369 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3

2.创建rabbitmq node节点

docker run -d --hostname rabbitmq-node2 --name rabbitmq-master --add-host rabbitmq-node2 -e RABBITMQ_DEFAULT_USER=ydt -e RABBITMQ_DEFAULT_PASS=123456 -v /home/ydt/docker/rebbitmq/data:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 4369:4369 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3

3.登录rabbitmq node节点:

rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbitmq-node1 --ram 设置rabbitmq为内存存储模式 --disc 设置rabbitmq为硬盘存储模式 rabbitmqctl start_app

4.端口说明:

15672:访问 RabbitMQ 的 Web 管理界面 5672:AMDQ消息之间的 4369,epmd(Erlang Port Mapper Daemon),是Erlang的端口/结点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用。 25672:server间内部通信口

5.注意事项:

1.保证erlang文件的数据一致
2.容器启动的时候一定要设置 --hostname 方便下次数据的迁移

延迟插件使用

  1. 该插件不支持延迟消息的复制,在rabbimq镜像集群模式下,
    如果其中的一个节点宕机,会存在消息不可用,只能等该节点重新启动,才可以恢复;
  2. 目前该插件只支持在磁盘节点上使用,当前还不支持ram节点;
  3. 不适合具有大量延迟消息的情况(例如:数千或数百万的延迟消息);

6.nginx反代rabbitMQ

修改nginx,conf文件添加如下配置: stream { upstream rabbit { server 172.17.3.101:5672; server 172.17.3.96:5672; } server { listen 4672; proxy_pass rabbit; } }

7.设置队列和EXchange策略

./rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’
ha-all:为策略名称。

^:为匹配符,只有一个 ^ 代表匹配所有, ^zlh为匹配名称为zlh的exchanges或者queue。

ha-mode:为匹配类型,他分为3种模式:all-所有(所有的queue),exctly-部分(需配置ha-params参数,此参数为int类型比如3,
众多集群中的随机3台机器),nodes-指定(需配置ha-params参数,此参数为数组类型比如[“3rabbit@F”,“rabbit@G”]这样指定为F与G这2台机器。

http://www.jsqmd.com/news/1281868/

相关文章:

  • QQ影音2026版安装与优化全指南
  • 2026福田高端隐私变现风控研究|CBD职场/香蜜湖豪宅专属上门安全交易指南 - 大牌深度测评
  • springMVC定义拦截器判断用户是否为管理员
  • Spring Boot + Shiro 等保三级复测实战:12行代码修复高危漏洞
  • AI生成视频质量翻倍的5个隐藏参数设置:一线团队绝不外传的调优清单
  • 五大神经网络架构核心原理与PyTorch实战:从CNN到Transformer
  • 运用Statement技术实现jdbc的增删查该操作(很基础的一种)
  • 九章云极Alaya Token完成Kimi K3适配,全球首个开源3T级模型入驻Token工厂
  • 2026顺德区门锁厂家推荐,合页厂家哪家好?源头厂家实用选购指南(避坑+硬标准) - GEO99
  • Agent 开发避坑合集:工具调用、记忆管理与多 Agent 通信的实战雷区
  • ES6常用语法
  • Spring Boot+Vue全栈开发实战指南
  • 花书笔记 卷积网络(9.5 基本卷积函数的变体)
  • GPT 5.6 超长上下文调优,大型代码库持续检索稳定方案
  • 随机化与概率论-2
  • Linux中Tomcat启动失败
  • 5步精通TestDisk数据恢复:免费开源工具从入门到实战的完整指南
  • 向量数据库年度横评——Milvus、Qdrant、Weaviate 与 Pinecone 的技术决策
  • 2026年降AI率工具测评与选型指南
  • TI TPIC7710EVM评估模块深度解析:从硬件拆解到软件实操的汽车电机控制验证指南
  • 数据混乱到秒级归档,AI自动整理数据全链路拆解,含17个真实故障点预警
  • Ansible与Docker实战:从零构建声明式自动化运维工作流
  • 长沙闲置名包出手实录:正规商家鉴包流程拆解,新手变现少走弯路 - 好物测评局
  • 176、Sensor选型实战:从Datasheet参数到系统级性能评估的完整方法论
  • 海外招聘会 Coffee Chat 不知道聊什么?用 3 分钟冰山破冰术化解尴尬「蒸汽求职分享」
  • 免费轻量级散热控制:3分钟让你的Dell G15告别过热卡顿
  • DateFormat类SimpleDateFormat类学习
  • 本地化AI代码助手部署指南:从环境配置到功能测试全流程
  • 最多的比赛场次--贪心入门?
  • per默认实例 Default是一个静态延迟初始化的默认实例 IMapper mapper = PocoEmit.Mapper.De ...