RabbitMQ原理以及使用场景是什么

介绍

本篇文章给大家分享的是有关RabbitMQ原理以及使用场景是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>一。RabbitMQ简介

MQ全称为消息队列,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现.AMQP的主要特征是面向消息,队列,路由(包括点对点和发布/订阅),可靠性,安全.AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

<强>二。RabbitMQ使用场景

<强> 1。解耦(为面向服务的架构(SOA)提供基本的最终一致性实现)

场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。

 RabbitMQ原理以及使用场景是什么

传统模式的缺点:

<李>

,假如库存系统无法访问,则订单减库存将失败,从而导致订单失败

<李>

,订单系统与库存系统耦合

引入消息队列

 RabbitMQ原理以及使用场景是什么

<李>

,订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功

<李>

,库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作

<李>

,假如:在下单时库存系统不能正常使用。也不影响正常下的单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦

<李>

,为了保证库存肯定有,可以将队列大小设置成库存数量,或者采用其他方式解决。

基于消息的模型,关心的是“通知”,而非“处理”。

短信,邮件通知,缓存刷新等操作使用消息队列进行通知。

 RabbitMQ原理以及使用场景是什么

消息队列和RPC的区别与比较:

<李>

, RPC:异步调用,及时获得调用结果,具有强一致性结果,关心业务调用处理结果。

<李>

,消息队列:两次异步RPC调用,将调用内容在队列中进行转储,并选择合适的时机进行投递(错峰流控)

<强> 2。异步提升效率

场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1。串行的方式;2。并行方式

扩展:

异步并发利器:实际项目中使用CompletionService提升系统性能的一次实践

(1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端

 RabbitMQ原理以及使用场景是什么

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

 RabbitMQ原理以及使用场景是什么

引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:

 RabbitMQ原理以及使用场景是什么

<强> 3。流量削峰

流量削峰也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛

<强>应用场景:系统其他时间一系统每秒请求量就100个,系统可以稳定运行。系统每天晚间八点有秒杀活动,每秒并发请求量增万至1条,但是系统最大的处理能力只能每秒处理1000个请求,于是系统崩溃,服务器宕机。

<强>之前架构:

RabbitMQ原理以及使用场景是什么