消息队列-面向小白

什么是消息队列

消息队列,MQ(Message Queue),包含两个关键词:消息和队列

1、消息是指在应用间传输的数据,消息表现形式是多样的(包括文本、结构化的对象格式等)。

2、队列,抽象意义上来说,就是消息的进和出,从时间意义上来说进和出不一定是同步的,一个典型的消息队列,至少包含消息的发送、接受和存储功能。

消息队列是一种先进先出的数据结构,是一种应用程序对应用程序的通信方式。生产着消费者模型的一个典型代表。

消息队列的作用

主要围绕三点:应用解耦、异步消息、流量削峰

**解耦:**系统的耦合性越高,容错性越低。

	   应用场景:订单系统
	   
	   传统做法:
	   
	   ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201229160513428.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk5NzY5OA==,size_16,color_FFFFFF,t_70#pic_center)

传统模式的缺点:

用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出现故障或者升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验;系统的耦合度越高,容错性越低。

中间件模式:

在这里插入图片描述
使用消息队列解耦合,系统的容错性就高了。比如物流系统发生故障,需要几分钟才能来修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作正常完成。当物流系统恢复上线后,补充处理存在消息队列中的数据即可,终端系统感知不到物流

系统发生过几分钟的故障。

异步:

场景说明:用户注册后,需要发注册邮件和注册短信

传统的做法有两种方式:

1、串行:将注册信息写入数据库成功后,发送注册邮件,再发送短信;

在这里插入图片描述

2、并行:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信
在这里插入图片描述
使用消息队列:将不是必须的业务逻辑,异步处理。改在后如下:
在这里插入图片描述

削峰:
场景说明:商品秒杀业务,一般会因为流量过大,导致流量暴增,应用挂掉传统做法
限制用户数量
使用消息队列
用户的请求,服务器接收后,首先写入消息队列,秒杀业务
在这里插入图片描述
增加一个消息队列,不管请求有多少,先存入消息队列,让系统慢慢处理请求,假如消息队列长度超过最大数量,则直接抛弃用户请求或者跳转到错误页面。

消息队列缺点

1、系统可用性降低。
系统引入的外部依赖越多,越容易挂掉。本来你就是 A 系统调用 BCD 三个系统的接口就好了, ABCD 四个系统好好的,没啥问题。但是你偏偏要在系统A和BCD之间加个MQ,好了,MQ一挂,整套系统就蹦,A就调不到BCD了。
2、增加了系统的复杂度。
硬生生加个MQ进来,怎么保证消息没有重复消费?消息丢失的情况?消息的传输顺序性?问题一大堆,都得一一的去处理。
消息队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值