带你从头进行RabbitMQ安装、集群搭建、镜像队列配置和代码验证(上)

简介: 带你从头进行RabbitMQ安装、集群搭建、镜像队列配置和代码验证(上)

前言


不知道说什么好,直接开始吧。本来想采用最新版本的,一想到生产和测试必须版本保持一致,不能随便升级,就只好去下载指定版本的rabbitmq的rpm。


RabbitMQ概念


Broker消息中间件的服务节点,RabbitMQ的一个服务实例,也可以看做是RabbitMQ的一台服务器


Queue 队列:用于存储消息。kafka不一样,它的消息存在在topic逻辑层面,而队列存储的只是topic中实际存储文件中的编译标识。多个消费者可以同时订阅一个队列,平均分摊(Round-robin轮询)处理消息


Exchange 交换器:生产者将消息发送到交换器,由交换器路由到一个或者多个队列中


  • directexchangequeue进行bingding时会设置相应的routingkey生产者发送消息到交换器时会设定相应的routingkey,如果这两个routingkey相同,消息都会投放到绑定的队列上。
  • topicdirect一样,但是支持routingkey的通配符模式,可以有通配符:* , # 其中 * 表示匹配一个单词, #则表示匹配没有或者多个单词
  • fanout 直接将发送到该交换器的消息路由到它绑定的一个或者多个队列
  • header 根据添加的header来判断
  • x-match == all,匹配所有header
  • x-match == any, 只需要匹配其中的一个header的值


Routingkey 路由键: 生产者将消息发给交换器的时候, 一般会指定一个 RoutingKey ,用 来指定这个消息的路由规则,而这个 RoutingKey 需要与交换器类型和绑定键 (BindingKey) 合起来使用才能最终生效。在交换器类型和绑定键 (BindingKey) 固定的情况下,生产者可以在发送消息给交换器时, 通过指定 RoutingKey 来决定消息流向哪里


Bindingkey 绑定:通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一绑定键 BindingKey ,这样 RabbitMQ 就知何正确将消息路由到队列了。BindingKey只针对特定交换器才有效。


Producer消息生产者


Consumer消息消费者


安装条件


环境


Centos 7.4 3台虚机8c16g


用户权限


需要有sudo权限


安装文件


下载的文件统一在/home/lazasha/download目录下, rabbitmq和erlang对应的版本关系可以参考:


https://www.rabbitmq.com/which-erlang.html


epel: epel-release-7-12.noarch.rpm


下载地址:https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm


erlang:erlang-22.1.8-1.el7.x86_64.rpm


下载地址:https://github.com/rabbitmq/erlang-rpm/releases


rabbitmq: rabbitmq-server-3.8.2-1.el7.noarch.rpm


下载地址:https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.8.2/


key: rabbitmq-release-signing-key.asc (我好像后面没有用到)


下载地址:https://github.com/rabbitmq/signing-keys/releases


image.png


步骤


epel安装


sudo yum -y install epel-release-7-12.noarch.rpm


erlang安装


sudo yum -y install erlang-22.1.8-1.el7.x86_64.rpm


image.png


检查是否安装成功:


image.png


rabbitmq安装


image.png

image.png

image.png


在他两台机器上同样操作. 服务缺省端口是5672.


集群搭建


在3台机器上/etc/hosts文件中添加IP和节点名称的对应


10.156.13.92 lchod1392
10.156.13.93 lchod1393
10.156.13.94 lchod1394


把lchod1392上的 cookie文件,赋值到lchod1393、lchod1394节点上,集群环境下各个


节点的cookie必须一致。rpm安装的cookie 文件默认路 径为

/var/lib/rabbitmq/.erlang.cookie


注意:.erlang.cookie可能有权限问题,可以使用下面的操作:


sudo chmod -R 600 /var/lib/rabbitmq/.erlang.cookie


注意: 拷贝到另外两台机器上后,不管怎么样执行一下下面的命令,改一下.erlang.cookie的owner:


sudo chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie


image.png

image.png


通过Rabbitmqctl来配置集群,集群内部通讯端口是25672


1.首先启动3个节点上的RabbitMQ服务


sudo systemctl start rabbitmq-server


可以使用rabbitmqctl cluster_status 查看各个节点的集群状态


2.以lchod1392为基准,将lchod1393、lchod1394加入到集群中,把3个节点都设置为

硬盘节点了。


lchod1393



sudo rabbitmqctl stop_app                    //只关闭rabbitmq服务,不关闭erlang服务
    sudo rabbitmqctl reset                       //这个命令我在加集群时没有执行
    sudo rabbitmqctl join_cluster rabbit@lchod1392   //--ram这个参数是内存节点模式,不是就是硬盘节点
    sudo rabbitmqctl start_app


lchod1394


sudo rabbitmqctl stop_app                    //只关闭rabbitmq服务,不关闭erlang服务
    sudo rabbitmqctl reset                       //这个命令我在加集群时没有执行
    sudo rabbitmqctl join_cluster rabbit@lchod1392   //--ram这个参数是内存节点模式,不是就是硬盘节点
    sudo rabbitmqctl start_app


image.png


3.检查集群状态


sudo rabbitmqctl cluster_status



image.png


注意点: 如果关闭了集群中的所有节点,确保启动时最后一个关闭的节点第一个启动,否则会有问题。



相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8月前
|
消息中间件 Java 数据库
RocketMQ实战—9.营销系统代码初版
本文主要介绍了实现营销系统四大促销场景的代码初版:全量用户推送促销活动、全量用户发放优惠券、特定用户推送领取优惠券消息、热门商品定时推送。
RocketMQ实战—9.营销系统代码初版
|
9月前
|
边缘计算 负载均衡 NoSQL
FreeMQTT Plus: 一个新型 MQTT Broker 集群的实现
FreeMQTT Plus 是一款基于 MQTT 协议的高性能消息中间件,采用分布式架构解决单点瓶颈问题。其核心由 Nginx 负载均衡器、黑(A)节点(MQTT Broker)、白(B)节点(消息路由)和日志(L)节点组成。通过无主从设计,支持高可用性、负载均衡与灵活扩展。针对会话同步、消息路由等挑战,FreeMQTT Plus 利用 MQTT5 特性定义元命令,实现节点间高效通信,无需依赖第三方组件。适用于物联网海量设备接入与高并发场景,为未来边缘计算和多级集群部署提供坚实基础。
1480 74
|
10月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
1346 91
|
12月前
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
2572 2
|
12月前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
1670 0
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
864 6
|
消息中间件
rabbitmq,&队列
rabbitmq,&队列
|
消息中间件 JSON Java
玩转RabbitMQ声明队列交换机、消息转换器
玩转RabbitMQ声明队列交换机、消息转换器
429 0
|
消息中间件 Linux
centos7 yum快速安装rabbitmq服务
centos7 yum快速安装rabbitmq服务
429 0
|
消息中间件 中间件 微服务
RabbitMQ 入门简介及安装
RabbitMQ 入门简介及安装
305 0