【后端面经-架构】RabbitMQ简介

【后端面经-架构】RabbitMQ简介

    • 1. MQ介绍
    • 2. RabbitMQ
      • 2.1 简介
      • 2.2 架构:组件解释
      • 2.3 特点
      • 2.4 优缺点
    • 面试模拟
    • 参考资料

1. MQ介绍

MQ(Message Queue)用于在应用程序之间相互通信,在消息中发送数据进行通信,而不需要特意建立连接传输数据。
与之对应的另一种通信方式是远程直接调用(RPC),需要先建立通信连接然后传递数据。

2. RabbitMQ

2.1 简介

RabbitMQ是一个开源的消息队列系统,使用Erlang语言编写的,基于AMQP协议的。
AMQP全程是Advanced Message Queuing Protocol,即高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。具有面向信息、队列、路由(包括点对点和发布/订阅)、可靠性、安全等特征。

2.2 架构:组件解释

RabbitMQ的架构图如下所示:
在这里插入图片描述
下面介绍一下其中的主要概念:

  • Producer:消息生产者,就是投递消息的程序。
  • Connection:AMQP客户端到broker的TCP连接。
  • Channal:在connection内部建立的逻辑练级,这样一个connection能够承载多个访问;
  • Broker:消息队列服务器实体。
  • Virtual Host:虚拟主机,在多个用户使用同一个RabbitMQ服务器的时候,用于进行逻辑隔离,
  • Exchange:消息交换机,它指定消息中的routing key按什么规则,路由到哪个队列。主要的分配类型包括:
    • Direct:点对点(完全匹配)
    • Fanout:广播
    • Topic:主题(规则匹配)
  • Queue:数据队列,消息的载体,每个消息都会被投入到一个或多个队列。
  • binding:是exchange和queue之间的虚拟连接,包含routing key。

2.3 特点

RaybbiMQ具有如下特点:

  • 可靠性:持久化、生产确认等传输机制保证传输的可靠性;
  • 灵活路由:使用exchange机制灵活路由,下面会详细介绍;
  • 消息集群:多服务器组成集群;
  • 队列可用性:队列在集群的机器上可以镜像,部分节点出问题不影响整体可用性;
  • 支持多种协议:对于STOMP、MQTT等消息队列协议的支持;
  • 跟踪机制:对于异常消息提供消息跟踪,方便确认异常原因;
  • 用户友好:多语言客户端,管理界面易用,提供多种插件,也允许用户自己实现插件;

2.4 优缺点

  1. 优点
    RabbitMQ具有解耦、异步、削峰的优势;
    • 解耦:
      • 对于数据传入,一般的做法是直接把数据放在传输包中,从发送发传递给接收方,但是对于RaybbiMQ,发送方只需要把数据放在消息队列中,接收方从消息队列中获取数据即可,这样就实现了解耦;
      • 这样的好处是发送发的队列数据持久化,不会因为接收方的问题导致数据丢失,同时队列中的持久化数据可以被多次复用。
    • 异步:
      • 正如解耦部分的解释,读写操作是异步进行的,不需要等待接收方的处理,这样就提高了系统的吞吐量;
    • 削峰:
      • 当在活动日出现大规模交易的时候,如果按照传统的收发操作,会造成服务器的承载负担,相信大家都遇到过服务器崩溃的情况,这对于用户和公司来说都是很糟糕的情况;
      • 使用RabbitMQ的时候,先暂时将客户端的请求数据放在队列中,然后再慢慢处理,这样就可以避免服务器的崩溃。
  2. 缺点
    • 系统复杂度:RabbitMQ的使用会增加系统的复杂度,需要考虑到消息的可靠性、重复消费、消息丢失等问题;
    • 系统可用性:当MQ崩溃的时候,整个系统就会陷入瘫痪,不使用RabbitMQ的时候,只要几个服务节点能够正常运行,整个系统就可以正常运行;
    • 一致性问题:当多个消费者同时对一个队列进行读写,就会产生一致性问题

面试模拟

Q: 为什么选择使用RabbitMQ?
A:因为RabbitMQ具有解耦、异步、削峰的优点,维护消息队列,提高传输的可靠性和读写异步。

参考资料

  1. RabbitMQ 的应用场景以及基本原理介绍
  2. rabbitMQ到底是个啥东西?
  3. 一文带你了解RabbitMQ到底是个什么鬼!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19831.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【视觉SLAM入门】3. 相机模型,内外参,畸变推导

"瑾瑜匿瑕" 1. 相机模型和内参1.1 内参推导1.2 外参推导 2. 畸变2.1 径向畸变2.2 切向畸变 3. 深度信息3.1 算法测距3.2 物理测距 本节讨论围绕这个问题展开 机器人如何观测外部世界? \quad\large\textcolor{red}{机器人如何观测外部世界?} 机…

C++结合EasyX写扫雷(new)

【游戏】C结合EasyX写扫雷(时隔半年后重写) 上一次写扫雷这一次实现思路设置全局变量Grid类Grid类的成员函数启动画面死循环监听鼠标事件 全部代码其他 上一次写扫雷 大约半年之前的寒假期间,我接触了EasyX这个图形库,于是试着写…

数据结构--树和森林的遍历

数据结构–树和森林的遍历 树的先根遍历 void PreOrder(TreeNode* R) {if (R ! NULL){visit(R);while (R还有下一个子树T)PreOrder(T);} }树和二叉树的转化后》 树的先根遍历序列与这棵树相应二叉树的先序序列相同。 \color{red}树的先根遍历序列与这棵树相应二叉树的先序序列相…

串口的再认识

常用函数介绍 串口发送/接收函数 HAL_UART_Transmit(); 串口发送数据,使用超时管理机制(即在发送成功前一直阻塞) HAL_UART_Receive(); 串口接收数据,使用超时管理机制 HAL_UART_Transmit_IT(); 串口中断模式发送 HAL_UART…

C++ 变量类型

C 变量类型 变量其实只不过是程序可操作的存储区的名称。 在 C 中,有多种变量类型可用于存储不同种类的数据。 C 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量…

Pytorch实现warm up和consine decay

在深度学习领域,模型训练过程中的不稳定性是一个常见的问题。为了解决这个问题,在Resnet这篇论文也提及了Warm Up的方法,通过逐渐增加学习率,引导模型在训练初期更稳定地收敛。同时在warm up之后结合consine decay的方法让训练变得…

辅助驾驶功能开发-功能规范篇(22)-3-L2级辅助驾驶方案功能规范

1.3.3 TLA系统功能定义 1.3.3.1 状态机 1.3.3.2 状态迁移图 1.3.3.3 功能定义 1.3.3.3.1 信号需求列表 1.3.3.3.2 系统开启关闭 1)初始化 车辆上电后,交通灯辅助系统(TLA)进行初始化,控制器需在 220ms 内发出第一帧…

Spring-Interceptor拦截器

使用步骤 申明拦截器bean,并实现HandlerInterceptor接口 true为放行,false为拦截 2.定义配置类,继承WebMvcConfigurationSupport,实现addInterceptors方法,该方法调用具体的拦截器进行拦截 也可以在配子类通过实现W…

JMeter进行WebSocket压力测试

背景 之前两篇内容介绍了一下 WebSocket 和 SocketIO 的基础内容。之后用 Netty-SocketIO 开发了一个简单的服务端,支持服务端主动向客户端发送消息,同时也支持客户端请求,服务端响应方式。本文主要想了解一下服务端的性能怎么样,…

一百二十九、Kettle——从MySQL增量导入到GreenPlum

一、目标 用Kettle从MySQL增量导入数据到GreePlum 二、前提准备 (一)kettle已连上MySQL (二)kettle已连上GreenPlum 三、实施步骤 (一)打开kettle,新建转换任务。拖拽2个表输入、替换NULL…

Spring 如何解决 Bean 的循环依赖(循环引用)

Component public class A {Autowiredprivate B b;}Component public class B {Autowiredprivate A a;}上面的情况就是 循环依赖 Bean的创建初始化过程如下 如果不采取措施,那么循环依赖就会进入死循环 但 Spring 已经帮我们解决了大部分循环依赖问题 具体是如何解…

prompt:有需求就有价值,prompt案例

prompt:有需求就有价值 此文章来自于小七姐 首先来看需求: 客户需要生成1000条俏皮灵动,趣味盎然,比喻精妙的和美食有关的短句子,要求文风优美,句子让人充满食欲。 客户使用这些句子的场景比较奇妙&…