消息中间件产生的背景
在网络通讯中,Http
请求默认采用同步请求方式,基于请求与响应模式,在客户端与服务器进行通讯时,客户端调用服务端接口后,必须等待服务端完成处理后返回结果给客户端才能继续执行,这种情况属于同步调用方式。如果服务器端发生网络延迟、不可达的情况,可能客户端也会受到影响。
一、什么是消息中间件
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行
分布式系统
的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer
(生产者)、
Consumer
(消费者)例如:寄快递。

二、消息中间件的使用场景
2.1 异步处理
场景说明:用户注册后,需要发注册邮件和注册短信
传统的做法有两种:
1、串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信,以上三个任务全部完成后,返回给客户端

2、并行方式:将注册信息写入数据库成功后,发送注册邮件的同时发送注册短信,以上三个任务完成后,返回给客户端;与串行的差别是并行的方式可以提高处理的时间

引入消息队列,改造后的架构如下 :
按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是
50
毫秒。注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此架构改变后,系统的吞吐量比串行提高了3
倍,比并行提高了
2
倍
2.2 应用解耦
场景说明:用户下单后,订单系统需要通知库存系统,传统的做法是订单系统调用库存系统的接口

解耦合后:

订单系统:假如在下单时库存系统不能正常使用,也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了,实现订单系统与库存系统的应用解耦。
三、常见的消息中间件比较
特性MQ |
ActiveMQ
|
RabbitMQ
|
RocketMQ
|
Kafka
|
生产者消费者模式
|
支持
|
支持
|
支持
|
支持
|
发布订阅模式
|
支持
|
支持
|
支持
|
支持
|
请求回应模式
|
支持
|
支持
|
不支持
|
不支持
|