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

本文介绍了RabbitMQ,一种消息中间件,它通过队列实现服务间的解耦,支持点对点和发布订阅模式。主要功能包括解耦业务逻辑、存储消息、削峰填谷和异步处理。
摘要由CSDN通过智能技术生成

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天然支持异步处理消息
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值