本人目前项目中有用到rocketMQ作为数据传输过程中的中间件,今天整理了一下资料,记录一下自己对消息中间件的理解。
一.概念
1.MQ
message queue消息队列,消息队列是就是队列,是一种先进先出的数据结构。把要传输的数据放在队列中,用队列机制来实现数据的传递,也就是生产者产生消息,将消息放入队列。消费者消费消息,将消息从队列中读出。
2.消息中间件
消息中间件是对消息队列的应用,消息队列(MQ)只是一种数据结构,而消息中间件是分布式系统中一个组件,或者说是一个系统。以上就是MQ和中间件的关系。
消息中间件是基于队列和消息传递技术的,在网络环境中为应用系统提供同步或异步、可靠的消息传输。
目前行业内主要的MQ产品有:RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ、Kafka等等,我们项目用的是RocketMQ,项目是在我入职之前搭建的,有趣的是,当我问早起项目人员,为何我们选择rocketMQ时,他告诉我说因为集团云服务用的是阿里云,而阿里云用的是rocketMQ,我们肯定也就用rocketMQ。我一想,我擦,好有道理,我竟无法反驳。
二.面试问题点
1. 你们项目为什么要用到rocketMQ?
这个问题拆解以下,可以看作:什么是MQ?MQ由什么组成?又是怎么实现的?
什么是MQ前头讲过了,那么MQ的组成。
1.1 消息中间件的组成
broker 消息服务器,作为server提供消息核心服务
producer 生产者,业务的发起点,负责生产消息,并传输给到核心服务,也就是broker
consumer 消费者,业务的处理点,负责从broker获取到消息,并且对消息进行业务逻辑处理
queue 队列,点对点模式下,特定生产者向特定的队列发送消息,消费者订阅特定的队列来完成特定消息的获取
topic 主题,发布订阅模式下,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播
message 消息体,根据不同的通信协议定义的固定格式进行编码的数据包,用来封装业务数据,实现消息的传输
从queue和topic我们可以看出来,MQ是有两种模式的,一种点对点,一种广播模式(发布模式)
1.2 消息中间件的两种模式
点对点:queue
A-------------------------------queue---------------------------------B
江湖规矩,单挑!此种模式下,生产者A发送消息到queue队列中,然后消费者B从queue队列中取出消费。这个消息被B消费了之后,queue将不再进行存储,也就是说,该消息只能由一个消费者消费,其他消费者不可能再消费得到。若果没有消费者来消费,则该消息就被一直保存直到有消费者来消费。
广播:topic
跟1对1不同,这是一个N对N,生产者将消息发布到topic中,同时会有多个消费者(订阅者)来消费该消息,严格来说,是所有订阅者。
2. 消息中间件给你们带来了什么?解决了什么问题?
这个问题就是问作用、实际使用业务场景。
2.1 消息中间件的作用
三大作用:异步、解耦、削峰