当前位置:   article > 正文

【RabbitMQ 一】RabbitMQ简介、消息中间件、MQ的作用

【RabbitMQ 一】RabbitMQ简介、消息中间件、MQ的作用

RabbitMQ简介

很多介绍RabbitMQ的地方,上来就说这是一种消息中间件(Message Queue Middleware)。对于一些新手或者初级开发人员,“中间件”的概念并不是很清晰。那么什么是中间件呢?

1.什么是中间件

个人以为,中间件就是一种已经成熟的(可以在企业开发中使用的)、剥离了业务逻辑的可复用逻辑。这段逻辑能够提供某一方面很强大的功能,并且复用性很高,可以作为项目组件接入自己的服务。至于说是什么逻辑,那就得看是什么中间件了。

举个例子,我们其实在日常开发中经常能接触到一些中间件,只是我们用的时候并没有意识到他还有“中间件”这个称呼

  1. RPC中间件:大名鼎鼎的Dubbo
  2. 消息中间件:Apache的Kafka、我正在学习的RabbitMQ
  3. 缓存中间件:Redis
  4. 配置中间件:携程的Apollo、阿里的Nacos
  5. 存储中间件:阿里云的对象存储OSS

除了以上我用过的、知道的中间件,还有很多其他中间件不再一一列举

2.什么是消息中间件

先看MQ的全称是Message Queue Middleware,顾名思义,消息中间件的全称是“消息队列中间件”。

消息(Message)指的是在应用之间传递的数据。假设在微服务场景中,serviceA向serviceB以某种形式(http请求或者网关调用)发送了一段数据,这段数据就是消息。

既然MQ有一个Queue,说明其中必然存在一个队列。这个队列存放的自然就是消息。那么MQ的作用就是利用这个Queue,将serviceA与serviceB之间的数据交互与业务代码解耦。也就是在serviceA中不需要再去显式地写http请求或者网关调用serviceB的某个方法了,甚至serviceA压根都不用感知serviceB的存在.

3.MQ处理消息的方式

既然MQ用队列将业务代码和服务间的数据交互解耦了,那么自然支持异步的数据交互了。因为不再需要serviceA同步调用serviceB了,serviceA只需要调一下MQ,将消息写入MQ队列中。至于MQ什么时候将消息发给serviceB,那就跟serviceA完全没关系了。

MQ一般都支持以下两种异步消息处理机制:

  1. 点对点(Point to Point, P2P):消息生产者(serviceA)发送消息到MQ队列,消息消费者(serviceB)从MQ队列中接收消息
  2. 发布订阅(Pub/Sub):消息生产者(serviceA)向一个主题(topic)发布消息,订阅了这个topic的消费者(serviceB、serviceC…)就能从topic中收到消息。topic可以理解为消息的载体。

4.MQ的作用

MQ的功能有很多,但是最重要也最实用的就是这几条:

  1. 解耦:将业务代码与消息发送、接受机制剥离
  2. 存储:MQ队列能够存储消息,因此如果消息通知失败了,可以设计相应的补偿机制
  3. 削峰:在一些热点时段,如果上游突然发出很多消息,下游处理速度跟不上,很容易直接拉爆下游服务。MQ能够调节向下游推送消息的速度。这其实就是把消息先存在MQ,让下游慢慢处理
  4. 异步:因为使用MQ存储消息,所以MQ天然支持异步处理消息
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/511977
推荐阅读
相关标签
  

闽ICP备14008679号