MQ的优劣势及RabbitMQ相关概念

这篇具有很好参考价值的文章主要介绍了MQ的优劣势及RabbitMQ相关概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,MQ

1,MQ 的概念

MQ 全称 Message Queue(消息队列),是用来存储消息数据的容器(是一个中间件),一般用于分布式系统间的通信;MQ主要介于生产者和消费者之间,生产者将数据发送给消息队列,队列将这些消息数据进行存储,消费者从消息队列中取出消息数据进行消费。

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

 2,分布式系统之间通信的两种方式

2.1 两个通信的系统之间直接进行调用

如下图所示,A和B系统之间的通信方式就是直接进行调用,A需要B的数据的话需要调用相应接口,B给A返回相应数据,B调用A的数据时也是同理;

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

2.2 借用第三方中间件进行间接调用

 MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

 大部分分布式系统采用的就是第二种方式使用MQ这样一个消息队列中间件进行间接调用,这里的发送方称为生产者(生产消息),接收方称为消费者(消费消息)!

3,MQ的优势

3.1 应用解耦

假设有这样一个场景,一个用户购买了一件商品,购买商品的时候需要访问订单系统,这个订单系统直接和库存系统、物流系统和支付系统相关联,各个系统之间的关联系统如下:

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

 这个系统的主要业务逻辑是这样的:一个用户在购买商品时,首先访问订单系统,此时订单系统会分别访问库存、物流以及支付系统,只有这三个系统全部响应完成且响应正确的时候订单系统的页面才会正确返回给用户!

假设此时有一个系统响应错误,订单系统就会发生错误或者现在的需要新家一个系统时也不是很方便需要在订单系统中新增有关新系统的业务代码,如果此时介入一个中间件MQ用来存放订单系统给其他系统发送的消息数据时,问题就会迎刃而解;

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

引入消息队列这样的中间件,作为订单系统就不需要关心其他相关的三个系统的执行了,而且新加入一个系统时也不会直接和订单系统相关,新加入的系统只需要从MQ中拿取消息数据进行消费即可,此时整个系统之间的耦合度就会大大降低!

3.2 异步提速

未加入 MQ 之前的响应速度如图所示:

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

 总的花费时间是存入数据库的5ms+300ms = 305ms

加入 MQ 之后的响应速度如图所示:

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

 总的花费时间是存入数据库的5ms+20ms = 25ms

引入 MQ 之后采用的是异步的方式,订单系统将消息数据发送给MQ之后就直接给用户返回了,而库存、物流以及支付系统分别从 MQ 中拿出消息数据进行消费,这一步站在订单系统的角度是不关心的,三个系统也是并发的去消费消息的,这一过程是异步的,所以 MQ 的另一大优势也体现在异步提速上!

3.3 削峰填谷

假设此时有大量请求,每秒5000访问量访问A系统,但是A系统的处理能力是每秒1000的访问量,此时A系统就会崩溃,未加入 MQ 之前:

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

 加入 MQ 之后:

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式

 使用了 MQ 之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在 MQ 中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做“填谷”。使用MQ后,可以提高系统稳定性。

4,MQ的劣势

1,系统可用性降低

系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。如何保证MQ的高可用?

2,系统复杂度提高

MQ 的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过 MQ 进行异步调用。 如何 保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?

3,一致性问题

A 系统处理完业务,通过 MQ 给B、C、D三个系统发消息数据,如果 B 系统、C 系统处理成功,D 系统处理失败。如何保证消息数据处理的一致性?
引入了 MQ 势必会使得系统之间的调用变得更复杂,规则变得更多,对于上述问题 MQ 是怎么解决的后续再详细告知!

二,RabbitMQ 

1,RabbitMQ 的概念

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

2,RabbitMQ 模型架构及相关概念

MQ的优劣势及RabbitMQ相关概念,RabbitMQ,rabbitmq,分布式文章来源地址https://www.toymoban.com/news/detail-593723.html

  • Broker接收和分发消息的应用,RabbitMQ Server就是 Message Broker;
  • Virtual host出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等;
  • Connectionpublisher/consumer 和 broker 之间的 TCP 连接;
  • Channel如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销;
  • Exchangemessage 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast);
  • Queue消息最终被送到这里等待 consumer 取走;
  • Bindingexchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据。

到了这里,关于MQ的优劣势及RabbitMQ相关概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!

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

    2024年04月23日
    浏览(46)
  • 分布式系统架构中的相关概念

    1.1、衡量网站的性能指标 响应时间:指执行一个请求从开始到最后收到响应数据所花费的总体时间。 并发数:指系统同时能处理的请求数量。 并发连接数:指的是客户端向服务器发起请求,并建立了TCP连接。每秒钟服务器连接的总TCP数量 请求数:也称为QPS(Query Per Second) 指

    2024年04月26日
    浏览(44)
  • 微服务学习: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日
    浏览(54)
  • 分布式消息队列:Kafka vs RabbitMQ vs ActiveMQ

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

    2024年02月02日
    浏览(59)
  • Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

    在大规模数据采集和处理任务中,使用分布式架构可以提高效率和可扩展性。本文将介绍Python爬虫分布式架构中常用的消息队列工具Redis和RabbitMQ的工作流程,帮助你理解分布式爬虫的原理和应用。 为什么需要分布式架构? 在数据采集任务中,单机爬虫可能面临性能瓶颈和资

    2024年02月11日
    浏览(40)
  • (黑马出品_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日
    浏览(52)
  • 微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

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

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

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

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

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

    2024年04月11日
    浏览(45)
  • (黑马出品_高级篇_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日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包