RabbitMQ学习记录(一)-MQ的简单介绍

本文介绍了消息队列(MQ)的基本概念及其在流量消峰、应用解耦和异步处理等场景的应用。通过具体案例说明了如何利用MQ解决系统性能瓶颈问题,并介绍了MQ选型的相关考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是MQ

       MQ(Message Queue) 消息队列,本质上是一个队列,即满足先进先出原则,它就像是一个容器,容器中保存的是需要被传递的数据(消息)。

       MQ就相当于一个大的缓冲区,将数据临时存放到这个缓冲区中,当有应用程序需要使用这些数据的时候,就将自己注册到MQ上,这样MQ就会将数据发送给这些应用程序了。

MQ整体处理逻辑

  • 生产者:产生数据的程序,并把产生的数据发送到指定的消息队列。
  • 消息队列:暂存数据的缓冲区,并把数据按照顺序发送到数据的使用者(消费者)。
  • 消费者:监听指定队列,将队列中的数据取出来,之后处理取出的数据。

2. MQ的使用场景

       因为上面说过,MQ相当于一个大的缓冲区,所以就会缓解程序之间调用的紧密性,给程序之间一个喘息的机会,也就是所谓的解耦,根据这个逻辑,下面介绍MQ的使用场景。

流量消峰

       假设,我们新开发了一个论坛的单应用程序,论坛刚开始的时候,活跃度只有100次的并发用户访问,随着时间的推移和用户对于论坛的认可,论坛的用户开始变多,访问量开始变成500次并发了,这样按照原来的设计,论坛是无法处理500次并发的,性能问题开始暴露出来,用户使用开始变慢,或者无法访问。该如何解决呢?

解决方案:

1. 保持系统单应用架构不变,控制并发流量,你当然不能控制用户访问,所以只能是在应用中加一个可以控制并发量的中间件帮忙解决问题。虽然这种解决方案只能暂时有效,但总比现在的用户体验要好的多。

2. 改变系统部署的整体架构,将单应用部署改成分布式部署,这一定是一个最终的好的解决方案,但是这种解决方案要复杂的多。

当我们需要更快的解决此时的性能问题,所以我们选择第一种解决方案,也就是将并行请求变成串行请求。

       我们只要选择一个合适的中间件,这里选择MQ,在用户的请求与程序之间添加一个MQ,所有的请求都发送到MQ中,我们再将MQ设置一个流量控制,不要同时将500个请求发送要后台处理程序,而是设置一个规则,将500个请求分批次发送到处理程序,MQ发送到处理程序的并发量控制在100一下,只要分发规则设置的合理,也会短时间内处理请求的,用户体验是无感知变化的。

应用解耦

        所谓应用解耦就是将原来的串行应用,改成并行应用。

        假设:有一个订单系统,系统中有订单管理、库存管理、物流管理三个模块协同完成下单操作,它们是串联的,当库存管理模块出现问题的时候,导致后续的操作无法进行,所以导致用户下单失败,这样用户的体验是很差的,其实三个模块之间的操作是可以分开处理的,就是并行操作的,这样我们就可以引入一个MQ消息中间件来帮助我们将它们分开,就是在用户下单之后,将下单信息首先放入到MQ中,再由MQ将订单信息分发给三个模块,让三个模块分别处理订单信息,这样即使有一个模块出现了问题,也不会影响用户的下单操作。

异步处理

       有些应用之间的相互调用是异步的,也就是不是实时处理的,所以使用消息中间件会让应用之间的调用耦合度降低,变得更优雅,整体架构更健壮。

      假设:有两个应用程序 A和B。A调用B,但是B的处理速度很慢,而A还需要B将处理结果给到A,以便A将处理状态写入数据库中,按照原来的处理方式,B需要提供一个查询的API,A定时轮询B的数据,这样速度很慢。或者A给B提供一个回调函数,当B处理完之后,调用A提供的回调函数,将处理结果返回给A,这两种处理方式都比较麻烦,而且耦合程度有点高。当我们引入消息中间件(MQ)之后,处理的方式就会变得很优雅。

     在A与B之间加一个MQ,A将数据发送到B之后,就不在与B进行交互了,A只是将自己注册到MQ当中,B处理完数据之后,将处理结果发送到MQ当中,MQ会将消息发送给A,A在进行自己的内部操作。

3. MQ 选型

流行的消息中间件

  • ActiveMQ
  • RabbitMQ
  • Kafka
  • RocketMQ

      由于业务需求,最适合我的是RabbitMQ,而且RabbitMQ的功能还强大,无变成语言的依赖等等有点,所以最终选择RabbitMQ。

对于其它几种MQ的对比,大家可以自行查阅,网上很多,这里就不例举了。

鸣谢

尚硅谷尚硅谷的个人空间_哔哩哔哩_Bilibili

遇见狂神说遇见狂神说的个人空间_哔哩哔哩_Bilibili

但是我还是建议大家理解完本系列的第二节,再去看二位老师的视频,会让你更好的理解课堂讲解。

RabbitMQ学习记录(二)-架构与基本概念_崔二旦的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值