兔子队列?RabbitMQ详解(1)

发布于:2025-05-12 ⋅ 阅读:(21) ⋅ 点赞:(0)

引入

首先先介绍一下什么是 RabbitMQ 的意思:Rabbit 是一个公司的名称,MQ 是 message queue (消息队列)的缩写,而 RabbitMQ 是 Rabbit 企业下的一个消息队列产品,是一个采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计的.,是当前主流的消息中间件之一。在互联网架构中,会经常使用 MQ 来作为消息消息通信服务。

AMQP,是高级消息队列协议(Advanced Message Queuing Protocol)的意思,是一个通用的应用层协议,提供统一的消息服务协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可以传递消息,并不受客户端或者中间件,开发语言等条件的限制

Message Queue

消息队列可以把它理解为数据结构中的“队列”,有先进先出的性质(FIFO),队列中存放的内容是消息(Message)。并且消息的的内容或格式也可以多种多样:JSON 数据,文本字符串等。

MQ 多用于分布式系统之间的通讯,而系统之间的调用常有两种方式:

  • 同步通讯:(下图右侧为“服务2”)直接调用对方的服务,数据从一端出发后立可以到达另一段
  • 异步通讯:数据从一段发出后,先进入一个容器(消息队列)进行临时存储,当达到某种条件的时候,这个容器再发送给另一端,而这个容器的具体实现就是 message queue(MQ)

 作用

从上图上可以看出,MQ 在整个系统调用过程中充当了一个类似于中介的作用,也就是接受和转发消息,常见解决的问题的场景有一下几种:

  • 异步解耦:有时候调用一些接口返回数据的时候,可能在查询数据库的时候话费了很长的时间才可以把数据返回,但是这样给用户的体验就很差,所以可以优化一下,就是不即使的返回结果,借助 MQ 把这些操作异步优化,比如用户注册后发送注册短信或者邮件通知,可以作为异步任务处理,从而不必等待这些操作完成后才告知用户注册成功
  • 流量削峰:如果某一时刻某个接口的 QPS 或者访问量激增的情况下,我们的服务器就可能会崩溃掉,但是我们如果因为这种并不是很常见的情况下投入成本去增加数量或者提升服务器处理能力的话是比较浪费资源的,因此我们可以使用 MQ 的关键组件来支撑突发访问量,可以通过其来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求

网站公告

今日签到

点亮在社区的每一天
去签到