赞
踩
很多介绍RabbitMQ的地方,上来就说这是一种消息中间件(Message Queue Middleware)。对于一些新手或者初级开发人员,“中间件”的概念并不是很清晰。那么什么是中间件呢?
个人以为,中间件就是一种已经成熟的(可以在企业开发中使用的)、剥离了业务逻辑的可复用逻辑。这段逻辑能够提供某一方面很强大的功能,并且复用性很高,可以作为项目组件接入自己的服务。至于说是什么逻辑,那就得看是什么中间件了。
举个例子,我们其实在日常开发中经常能接触到一些中间件,只是我们用的时候并没有意识到他还有“中间件”这个称呼
RPC中间件
:大名鼎鼎的Dubbo消息中间件
:Apache的Kafka、我正在学习的RabbitMQ缓存中间件
:Redis配置中间件
:携程的Apollo、阿里的Nacos存储中间件
:阿里云的对象存储OSS除了以上我用过的、知道的中间件,还有很多其他中间件不再一一列举
先看MQ的全称是Message Queue Middleware,顾名思义,消息中间件的全称是“消息队列中间件”。
消息(Message)指的是在应用之间传递的数据。假设在微服务场景中,serviceA向serviceB以某种形式(http请求或者网关调用)发送了一段数据,这段数据就是消息。
既然MQ有一个Queue,说明其中必然存在一个队列。这个队列存放的自然就是消息。那么MQ的作用就是利用这个Queue,将serviceA与serviceB之间的数据交互与业务代码解耦。也就是在serviceA中不需要再去显式地写http请求或者网关调用serviceB的某个方法了,甚至serviceA压根都不用感知serviceB的存在.
既然MQ用队列将业务代码和服务间的数据交互解耦了,那么自然支持异步的数据交互了。因为不再需要serviceA同步调用serviceB了,serviceA只需要调一下MQ,将消息写入MQ队列中。至于MQ什么时候将消息发给serviceB,那就跟serviceA完全没关系了。
MQ一般都支持以下两种异步消息处理机制:
点对点(Point to Point, P2P)
:消息生产者(serviceA)发送消息到MQ队列,消息消费者(serviceB)从MQ队列中接收消息发布订阅(Pub/Sub)
:消息生产者(serviceA)向一个主题(topic)发布消息,订阅了这个topic的消费者(serviceB、serviceC…)就能从topic中收到消息。topic可以理解为消息的载体。MQ的功能有很多,但是最重要也最实用的就是这几条:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。