目录
一、为什么会出现消息中间件?
二、消息中间件是干嘛的?
三、应用解耦
四、流量削峰
五、异步处理
1.串行方式:
2.并行方式:
3.引入消息队列:
六、RocketMQ的架构及概念
一、为什么会出现消息中间件?
Http请求默认采用同步请求方式,基于请求与响应模式,在客户端与服务器进行通讯 时,客户端调用服务端接口后,必须等待服务端完成处理后返回结果给客户端才能继续执行,这种情况 属于同步调用方式。如果服务器端发生网络延迟、不可达的情况,可能客户端也会受到影响,为了解决这个问题,消息中间件就产生了。
二、消息中间件是干嘛的?
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统 的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)例如:寄快递
三、应用解耦
如果系统的耦合性越高,容错性就越低,以电商应用为例,用户创建订单后, 如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障 或者因为升级等原因暂时不可用,都会造成下单操作异常!
使用消息队列解耦,系统的耦合性就会下降了,比如物流系统发生故障, 需要几分钟才能修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作正常完成。当物流系统恢复后,补充处理存在 消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟故障。
举例说明:
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户下单成功
库存系统:订单下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行
库存操作
假如:在下单时库存系统不能正常使用,也不影响正常下单,因为下单后,订单系统写入消息
队列就不再关心其他的后续操作了。实现了订单系统与库存系统的应用解耦。
四、流量削峰
应用系统如果遇到系统请求流量的瞬间猛增,有可能将系统压垮,有了消 息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提高系统的稳定性
举例说明:
秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为了解决这个问题,一般需要 在应用前端加入消息队列。
五、异步处理
用户注册后,需要发注册邮件和注册短信 传统的做法有两种
1.串行方式:
将注册信息写入数据库成功后,发送注册邮件,再发送注册短信,以上三个任务全部完成 后,返回给客户端
2.并行方式:
将注册信息写入数据库成功后,发送注册邮件的同时发送注册短信,以上三个任务完成 后,返回给客户端;与串行的差别是并行的方式可以提高处理的时间
3.引入消息队列:
六、RocketMQ的架构及概念
Broker(邮递员) :Broker是RocketMQ的核心,负责消息的接收,存储,投递等功能
NameServer(邮局) :消息队列的协调者,Broker向它注册路由信息,同时Producer和Consumer向其获取路由信息
Producer(寄件人) :消息的生产者,需要从NameServer获取Broker信息,然后与Broker建立连接,向Broker发送消息
Consumer(收件人) :消息的消费者,需要从NameServer获取Broker信息,然后与Broker建立连接,从Broker获取消息
Topic(地区) :用来区分不同类型的消息,发送和接收消息前都需要先创建Topic,针对Topic来发送和接收 消息
Message Queue(邮件) :为了提高性能和吞吐量,引入了Message Queue,一个Topic可以设置一个或多个Message Queue,这样消息就可以并行往各个Message Queue发送消息,消费者也可以并行的从多个 Message Queue读取消息
Message: Message 是消息的载体。