RabbitMQ(消息队列)的特性-并用具体应用场景来介绍
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ(消息队列)的特性-并用具体应用场景来介绍相关的知识,希望对你有一定的参考价值。
文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
RabbitMq 专栏直通车
干货实战-RabbitMQ(消息队列)的特性-并用具体应用场景来介绍
一、RabbitMQ是什么?
概述:
RabbitMQ是一款开源并实现了高级消息队列协议(即AWQP)的消息中间件,即支持单一节点的部署,同时也支持多个节点的集群部署,在某种情况下,完全可以满足目前互联网应用或产品高并发、大规模和高可用的要求。
实现:
AMQP :Advanced Message Queue,它是一个面向消息中间件的开放式标准应用层协议。
- 消息方向
- 消息队列
- 消息路由(包括点到点和发布-订阅式模式)
- 可靠性
- 安全性
AMQP要求【消息的提供者】和【客户端接受者的行为】要实现对不同供应商可以用相同的方式(如:SMTP、HTTP、FTP等)进行互相操作。
AMOP是一个【线路级协议】,线路级协议描述的是通过网络发送的数据传输格式,因此,任何符合该数据格式的消息发送者和接受工具都可以互相兼容和互相操作。
RabbitMQ以AMOP协议实现,因此可以支持多种操作系统,多种编程语言,几乎可以覆盖市场上所有主流的企业技术平台。
二、RabbitMQ的作用/特性
- 异步通信
- 服务解耦
- 接口限流
- 消息分发
- 延迟处理
…
三、RabbitMQ的作用/特性-实战演练
1、异步通信/服务解耦-注册用户
例子:注册用户
未引用消息队列的业务流程:
采用消息中间件的业务流程:
------------------------------------------------对比-------------------------------------------------------------
对于未引用消息队列的业务流程来看:
从业务流程可以看出,注册这个需求,目的在于:
提交注册信息 --> 验证注册信息的合法性 --> 入库
严格来说,邮箱/短信这块业务逻辑并不属于注册业务逻辑,但是传统的业务一条龙模式,并没有把这块拆分出来,这样的话可能会造成影响:
- 因为邮箱/短信的介入导致整体等待时间的延长。
- 处理邮箱/短信这块逻辑时,有面临此业务逻辑异常导致核心业务逻辑失败的风险。
而RabbitMQ的引入,将一条龙服务进行解耦,降低接口整体的等待时间的同时,也避免了邮箱/短信这块逻辑异常导致核心业务失败的风险。
2、接口限流和消息分发-商场商品抢购活动(商品秒杀)
例子:商场商品抢购活动(商品秒杀)
未引用消息队列的业务流程:
采用消息中间件的业务流程:
------------------------------------------------对比-------------------------------------------------------------
相比未引用消息队列的商品抢购活动的流程来说,RabbitMQ的引入大大的改善系统的整体业务流程和性能
RabbitMQ的引入,主要体现在:
- 【接口限流】:当前段产生高并发请求时,并不会想无头苍蝇一样立即达到后端,而是将这些请求按照先来后到的规则加入RabbitMQ队列,在某种程度上实现限流操作。
- 【消息异步分发】:当商品库存充足时,当前抢购的用户将可以抢到该商品,之后异步通过发送短信,发送邮件的方式通知用户,告知尽快付款,某种程度上,实现了异步分发。
3、业务延迟队列-商品秒杀后30分钟之内付款
例子:商品秒杀后30分钟之内付款
未引用消息队列的业务流程:
采用消息中间件的业务流程:
------------------------------------------------对比-------------------------------------------------------------
对于未引用消息队列的流程来说带来的风险有:
- 如果定时器频繁的从数据库中获取"未付款"状态的订单,其数据量之大将难以想象,如果大批量用户在30分钟之内未付款,造成的结果就是数据库中获取的数据量会一直增大,当达到一定程度时,将给数据库服务器和应用服务器带来巨大的压力,更有甚者直接压垮服务器,导致全线崩溃。
- 在早期经常出现的网站崩溃,单击后无响应等状况,就是因为在某一时刻产生的高并发,或者定时频繁拉取数据库得到的数据量过大,导致内存、CPU、网络、数据库服务等过载过高而引起的。
而引用消息队列的好处就不用多说了。
以上是关于RabbitMQ(消息队列)的特性-并用具体应用场景来介绍的主要内容,如果未能解决你的问题,请参考以下文章
消息队列(kafka/nsq 等)与任务队列(celery)到底有啥不同