Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >RabbitMQ应用场景和集群搭建复习

RabbitMQ应用场景和集群搭建复习

作者头像
别团等shy哥发育
发布于 2023-10-17 06:19:15
发布于 2023-10-17 06:19:15
21700
代码可运行
举报
运行总次数:0
代码可运行
RabbitMQ应用场景和集群搭建

1. MQ的应用场景

1.1 异步处理

场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 2.并行的方式

  • 串行方式: 将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西.
  • 并行方式: 将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。
  • 消息队列:假设三个业务节点分别使用50ms,串行方式使用时间150ms,并行使用时间100ms。虽然并行已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回. 消息队列: 引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理

由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3倍,是并行的2倍。


1.2 应用解耦

场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口.

这种做法有一个缺点:

当库存系统出现故障时,订单就会失败。 订单系统和库存系统高耦合. 引入消息队列

  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
  • 库存系统:订阅下单的消息,获取下单消息,进行库操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失.

1.3 流量削峰

场景: 秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。

作用:

​ 1.可以控制活动人数,超过此一定阀值的订单直接丢弃(我为什么秒杀一次都没有成功过呢^^)

​ 2.可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单)

1.用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面.

2.秒杀业务根据消息队列中的请求信息,再做后续处理。


2、RabbitMQ集群搭建

2.1 普通集群(副本集群)

默认情况下:RabbitMQ代理操作所需的所有数据/状态都将跨所有节点复制。这方面的一个例外是消息队列,默认情况下,消息队列位于一个节点上,尽管它们可以从所有节点看到和访问

2.1.1 架构图
2.1.2 集群搭建
1、集群规划:这里用三台虚拟机测试
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
192.168.159.111 mq1
192.168.159.39 mq2
192.168.159.40 mq3
2、克隆三台机器主机名和ip映射

在三台机器中追加如下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/hosts

添加如下配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
192.168.159.111 mq1
192.168.159.39 mq2
192.168.159.40 mq3

三台节点分别修改主机名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
node1: vim /etc/hostname 加入:  mq1
node2: vim /etc/hostname 加入:  mq2
node3: vim /etc/hostname 加入:  mq3
3、 在其他两台节点上安装rabbitmq

这个就大概说一下,网上教程太多了

(1).将rabbitmq安装包上传到linux系统中

(2).安装Erlang依赖包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm

(3).安装rabbitmq

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rpm -ivh rabbitmq-server-3.7.18-1.el7.noarch.rpm

注意:默认安装完成后配置文件模板在:/usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example目录中,需要将配置文件复制到/etc/rabbitmq/目录中,并修改名称为rabbitmq.config

(4).复制配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp /usr/share/doc/rabbitmq-server3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

(5).查看配置文件位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls /etc/rabbitmq/rabbitmq.config

(6).修改配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/rabbitmq/rabbitmq.config 

将上图中配置文件中%%去掉,以及最后的,逗号 修改为下图:

(7).启动rabbitmq中的插件管理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmq-plugins enable rabbitmq_management

常用命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl start rabbitmq-server
systemctl restart rabbitmq-server
systemctl stop rabbitmq-server
4、后台启动rabbitmq所有节点执行如下命令,启动成功访问管理界面:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmq-server -detached 

警告是因为没有PID文件的写入权限,先不用管。

5、在node2和node3执行加入集群命令:

(1)先将node2和node3节点关闭,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmqctl stop_app

(2)将node2和node3加入集群

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmqctl join_cluster rabbit@mq1

(3)启动服务

启动mq2和mq3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmqctl start_app
6、查看集群状态,任意节点执行:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmqctl cluster_status

此时集群已经搭建成功,登录管理界面查看:

7、测试在node1上添加交换机

查看node2和node3结点是否同步

8、测试在node1上添加队列

此时node2和node3结点也可以看到该队列,但是一旦主节点宕机,node2和node3是不能对外提供服务的。

2.2 镜像队列

镜像队列机制就是将队列在三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升MQ集群的整体高可用性。

2.2.1 架构图
2.2.2 配置

刚开始的时候只有个持久化,没有其他策略

(1)添加策略(在任意一台节点上执行)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
(2)生产者测试发一条消息
(3)将主节点node1宕机
(4)查看从节点状态

node2:

node3:

(5)此时测试消息是否能被消费

直接去连接从节点,假设连接node2

可以看到,从节点的消息是能否被消费掉的

队列中的消息也没有了。

(6)此时恢复node1

可以看到,此时node2变成了主节点

(6)删除策略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rabbitmqctl clear_policy ha-all

队列也不再是镜像队列了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RabbitMQ集群搭建过程-3
搭建集群后,主节点和从节点的交换机和消息队列是镜像的。如果此时主节点宕机了,从节点还能继续消费,Queues中的Node会替换成子节点,当主节点重启完成后,会加入到对应的Node子节点中,这样就形成了高可用架构。
Remember_Ray
2021/04/05
9130
RabbitMQ镜像集群搭建
Mirror镜像队列,目的是为了保证rabbitmq数据的高可靠性解决方案,主要就是实现数据的同步,一般来讲是2-3个节点实现数据同步(对于100%数据可靠性解决方案一般是3节点,但是基于我们的环境以下使用2个节点为例)。
默 语
2024/11/20
1370
RabbitMQ镜像集群搭建
RabbitMQ的应用场景以及基本原理介绍
1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现。 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信,
牛嗷嗷
2018/03/30
3.7K0
消息队列常见的几种使用场景介绍!
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ。
Spark学习技巧
2018/08/01
7880
消息队列常见的几种使用场景介绍!
rabbitmq高可用集群搭建
在进行RabbitMQ搭建时,我们基于现有的连接数据和业务需求进行了深入分析。目前的统计数据显示,连接数为631,队列数为80418。为了确保业务需求的顺利满足,我们需要在云产品和自建RabbitMQ消息队列服务之间做出选择。
误入歧途
2024/09/03
2480
rabbitmq高可用集群搭建
RabbitMQ + Haproxy 实现高可用镜像集群
1.准备阶段准备三台服务器案例使用三台腾讯云服务器43.138.xxx.xxx node182.157.xxx.xxx node239.105.xxx.xxx node3 结构图图片2.安装阶段修改节点名:查看三台服务器的主机名称,并分别修改主机名为 node1/2/3vim /etc/hostname修改主机名称修改HOST:注意:使用外网服务器时需要注意IP地址的填写在三台服务器分别执行当前命令vim /etc/hosts注意:如果是三台外网服务器则不能按照该写法43.138.xxx.xxx node1
Reset
2022/12/19
7240
RabbitMQ + Haproxy 实现高可用镜像集群
1.准备阶段 准备三台服务器 案例使用三台腾讯云服务器 43.138.xxx.xxx node1 82.157.xxx.xxx node2 39.105.xxx.xxx node3 结构图 2.安装阶段 修改节点名: 查看三台服务器的主机名称,并分别修改主机名为 node1/2/3 vim /etc/hostname 修改主机名称 修改HOST: 注意:使用外网服务器时需要注意IP地址的填写 在三台服务器分别执行当前命令 vim /etc/hosts 注意:如果是三台
Reset
2022/12/27
5070
RabbitMQ + Haproxy 实现高可用镜像集群
rabbitmq高可用集群搭建_mongodb高可用架构
​ 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目的。RabbitMQ 集群是一个或多个节点的逻辑分组,集群中的每个节点都是对等的,每个节点共享所有的用户,虚拟主机,队列,交换器,绑定关系,运行时参数和其他分布式状态等信息。一个高可用,负载均衡的 RabbitMQ 集群架构应类似下图:
全栈程序员站长
2022/09/30
2.5K0
rabbitmq高可用集群搭建_mongodb高可用架构
RabbitMQ集群
今天我们来学习如何避免单点的MQ故障而导致的不可用问题,这个就要靠MQ的集群去实现了。
叫我阿杰好了
2022/11/07
6710
RabbitMQ集群
RabbitMQ集群和高可用方案
Cluster多机多节点部署:多机多节点是指在每台机器中部署一个RabbitMQ服务节点,进而由多个机器组成一个RabbitMQ集群
CodingDiray
2020/05/21
10.7K1
CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务
CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 AMQP,即Advanced message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息
程序员鹏磊
2018/02/09
1.3K0
CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务
RabbitMQ之集群搭建
  最开始我们介绍了如何安装及运行 RabbitMQ 服务,不过这些是单机版的,无法满足目前真实应用的 要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台 RabbitMQ 服务器可以满足每秒 1000 条消息的吞吐量,那么如果应用需要 RabbitMQ 服务满足每秒 10 万条消息的吞 吐量呢?购买昂贵的服务器来增强单机 RabbitMQ 务的性能显得捉襟见肘,搭建一个 RabbitMQ 集群才是 解决实际问题的关键.
别团等shy哥发育
2023/02/25
4550
RabbitMQ之集群搭建
Rabbitmq实践与原理
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。
mikelLam
2022/10/31
7000
Rabbitmq实践与原理
DockerCompose搭建Rabbitmq集群
RabbitMQ底层依赖于Erlang,而Erlang虚拟机就是一个面向分布式的语言,默认就支持集群模式。集群模式中的每个RabbitMQ 节点使用 cookie 来确定它们是否被允许相互通信。
杨不易呀
2023/11/03
1.2K0
DockerCompose搭建Rabbitmq集群
Docker快速构建RabbitMQ集群
rabbitmq的.erlang.cookie如果发生变化,都应该重启那个rabbitmq
章工运维
2024/04/17
3620
Docker快速构建RabbitMQ集群
centos8安装rabbitmq_rabbitmq镜像集群
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
3320
centos8安装rabbitmq_rabbitmq镜像集群
RabbitMQ集群搭建
注意,这里三台服务器都连接上互联网,另外RabbitMQ集群节点必须在同一网段里,如果是跨广域网,效果会变差。
jwangkun
2021/12/23
6.1K0
RabbitMQ集群搭建
rabbitmq集群搭建_集群搭建步骤
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
1.1K0
rabbitmq集群搭建_集群搭建步骤
RabbitMQ 简介以及使用场景
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
海向
2019/09/23
1K0
RabbitMQ 简介以及使用场景
kafka使用场景举例_rabbitmq和kafka的区别面试
一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
全栈程序员站长
2022/11/04
8480
kafka使用场景举例_rabbitmq和kafka的区别面试
相关推荐
RabbitMQ集群搭建过程-3
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验