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

这篇具有很好参考价值的文章主要介绍了【后端面经-架构】RabbitMQ简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. MQ介绍

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

2. RabbitMQ

2.1 简介

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

2.2 架构:组件解释

RabbitMQ的架构图如下所示:
【后端面经-架构】RabbitMQ简介,后端面经,架构,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具有解耦、异步、削峰的优点,维护消息队列,提高传输的可靠性和读写异步。文章来源地址https://www.toymoban.com/news/detail-570956.html

参考资料

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

到了这里,关于【后端面经-架构】RabbitMQ简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

    聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合:用以计算一些值,比如:最大值

    2024年03月26日
    浏览(45)
  • RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!

    分布式事务是指涉及多个独立的计算机系统(也称为节点或参与者)之间的事务处理。在分布式系统中,每个节点可能各自拥有自己的数据存储和事务管理机制。分布式事务的目标是保证在跨多个节点执行的一系列操作可以以一致和可靠的方式执行和提交,即使在面对故障或

    2024年04月23日
    浏览(35)
  • 微服务学习:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    目录 一、高级篇 二、面试篇 ==============实用篇============== day05-Elasticsearch01 1.初识elasticsearch 1.4.安装es、kibana 1.4.1.部署单点es 1.4.2.部署kibana 1.4.3.安装IK分词器 1.4.4.总结 2.索引库操作 2.1.mapping映射属性 2.2.索引库的CRUD 2.2.1.创建索引库和映射 2.2.2.查询索引库 2.2.3.修改索引库 2.

    2024年02月02日
    浏览(42)
  • 分布式消息队列:Kafka vs RabbitMQ vs ActiveMQ

    在现代分布式系统中,消息队列是一种常见的异步通信模式,它可以帮助系统处理高并发、高可用性以及容错等问题。在这篇文章中,我们将深入探讨三种流行的分布式消息队列:Apache Kafka、RabbitMQ和ActiveMQ。我们将讨论它们的核心概念、算法原理、特点以及使用场景。 随着

    2024年02月02日
    浏览(49)
  • (黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 聚合 可以让我们极其方便

    2024年03月12日
    浏览(37)
  • 分布式搜索引擎(Elastic Search)+消息队列(RabbitMQ)部署(商城4)

    1、全文搜索 Elastic search可以用于实现全文搜索功能,例如商城中对商品搜索、搜索、分类搜索、订单搜索、客户搜索等。它支持复杂的查询语句、中文分词、近似搜索等功能,可以快速地搜索并返回匹配的结果。 2、日志分析 Elastic search可以用于实现实时日志分析,例

    2024年02月04日
    浏览(34)
  • 分布式 SpringCloudAlibaba、Feign与RabbitMQ实现MySQL到ES数据同步

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 同步调用 方案一:同步调用 基本步骤如下: hotel-demo对外提供接口,用来修改elasticsearch中的数据 酒店管理服务在完成数据库操

    2024年04月11日
    浏览(35)
  • (黑马出品_高级篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 消息队列在使用过程中,面

    2024年03月19日
    浏览(33)
  • 【103期】RabbitMQ 实现多系统间的分布式事务,保证数据一致性

    org.springframework.boot spring-boot-starter-amqp mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-jdbc com.alibaba fastjson 1.2.17 3.2.1.2配置文件内容: server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=tru

    2024年04月14日
    浏览(45)
  • SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈

    我们发现在微服务中有一个令人头疼的问题——部署,用Docker去解决这个部署难题 1、项目部署的问题 2、Docker 扔到一台机器上,它们的依赖难道没有干扰吗?不会,docker将打包好的程序放到一个隔离容器去运行,使用沙箱机制,避免互相干扰,之间不可见,这样就解决了混

    2023年04月24日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包