00:00
好,呃,今天来说一下MQ。呃,这个呢是学习目标,首先呢,大家应该知道啊,第一个就是什么是消息队列,我们为什么要用到消息队列好,第二个呢,就是它的安装和配置,那安装和配置呢,一个是Windows的,一个是Linux的,好接下来呢,我们了解一下MQ的5种模式,它的特征重点。重点的话呢,就是要理解呃,怎么样使用这个来整合我们的rabbit MQ, 好,那先看第一个啊,就是呃,什么是消息队列,我们为什么要使用这个消息队列。好吧,那我们大家需要注意啊,先不看消息队列,我们之前的话呢,咱学的,但在之前做的这个程序,它是不是都是单体程序啊,是不是啊,就是我做完一个程序之后,我就是部署在一台服务器上对不对,好这个呢,就是单体程序,当然了,之前单体程序的时候呢,就是传统的spring on呢,Spring m VC是吧?好,还有这个myate对不对,好,My beate, 那么它里面呢,很多这个配置文件之类的,当时呢,也给大家说了一个名词叫做什么呀。
01:23
单体地域是吧,好这个地方就是一个配置地域,好这是一个问题,所以呢,后来呢,我们直接做的时候就是什么呀,是不是使用的small boot呀,对不对啊,就是单体程序这一块呢,是后续,呃,我们呢在做项目的时候碰到比较多的。啊,因为就是你做微服务啊,做微服务开发的话呢,它的这个。部分模块还是单体的,OK.那么我们往下来看啊,它为啥要有使用这个消息队列呢?它肯定是随着这个程序它越来越膨胀是吧,就不再是单体了啊,这是后续啊了,为服务的时候来我们看一下啊,咱为啥要使用。
02:08
消息队列,那首先呢,在这个地方,MQ这个呢,就是消息队列什么意思呢?你看M就是message的意思,Q呢,Q是吧?啊这个是队列,消息队列是什么呢?大家看啊,它是一个应用程序和应用程序之间的通信方法,看到没有?你看啊,我们之前的时候在单体的时候,是不是都是整个类与类之间呢?是不是啊,我类于啊类之间,那我进行通信是吧,当时大家怎么通信的呀。想一想我是不是可以通过参数传递啊,是不是啊,参数传递是吧?啊或者呢,我通过这个Jason等等,好,那现在的话呢,是应用程序啊,应用程序和应用程序之间。
03:08
它的信息传递,好,这里面我们用的就是MQ消息好吧。OK, 往下呢来看啊,咱为啥要使用这个消息呢?是在项目当中啊,我们可以将一些无需及时返回去耗时的这个操作提取出来,做这个异步操作。优点呢,可以大大节省服务器的请求时间,那当然了,有人说我不用它行不行啊,不用它也可以啊,你不用它之前也有其他的方式啊,对不对,你web service呀,对吧,有其他的这个方式啊,也可以啊之前的,但是呢,经过这个实践,那MQ既然在项目当中,在企业当中大行其道,一定是他有什么呀,独特的优势对不对啊,那下面呢,有四大场景啊,四大场景来看一下啊。哪4大场景?
04:01
嗯。这四大场景的话,放到另外一个笔记里面了,好吧,先给大家说一下啊,这四大场景先放到这儿啊,看到没有,第一个呢就是解耦,实际上呢是做了一个解耦,第二个呢是提升系统时间,第三个呢是异步消息,第4个呢是过来堡护,叫做流量削风,好就这四个好吧,把它复制过来。绿碧。好,我保存一下啊,我保存到他们的MQ这一块啊。放这儿吧。好,它的四大优势啊,那大家看啊,第一个我说的是什么呀,第一个的话呢,是降低系统模块与模块之间的什么呀,是不是耦合度啊,对不对,大家想一下,我们在之前的时候,我们为什么要学这种框架呢?想一想,嗯,框架的目的是什么呀。
05:24
首先什么是框架,嗯,框架它就是一个软件呢,是不是半成品啊,对不对啊,那他的目的呢,是快速开发嘛,对吧。提高效率对不对啊,那还有一部分是什么呀?他是不是解耦啊解耦啊,OK, 怎么结偶了呢?你比如说spring这个框架,它是不是B之间的结偶啊,是不是啊,B的结偶,原来你没事你就拗一个拗一个,现在又不用你拗了,是不用你拗了,对吧?原来那个工作都交给谁来操作呀,是不是交给这个思动容器来操作呀,对吧,这是一个小的B,那大的话呢,就是。
06:15
比如说我们来集成这个small VC, 对吧?第PA solid是不是我也可以放到这个四种容器里面对吧,也是做一个结偶,那spring mvc呢,好,他这个框架做的就是外B层的结偶是吧?OK my business呢,好,My business他这个框架他做的就是我们CQ,是不是还有Java的这个结耦啊,对吧?好,大家看一下,那到现在的话呢,我们这个MQ。他这一块儿,他做的就是模块与模块之间的结耦是吧?啊降低这个耦合度OK。
07:07
那第二个呢,就是提升系统的时间,对吧,我们就是通过这个结偶消息队列啊,提升系统的这个时间,好再往下来看啊,下面有几个点呢,一个叫做呃,有异步消息啊,有过载保护啊,流量消峰,我们要看一看,有的也叫做薛峰,好吧,来往下来看啊,看下面这个图,呃,第一个呢,就是应用结偶,来应用结偶呢,再说一下,那首先的是这样的,我们在之前的时候都是单体的是不是对吧?那么现在啊,大家来看一看,那比如说这是一个什么呀。订单系统是吧,哎,这是一个什么。库存系统是不是好,现在的话呢,就是分系统进行开发。啊,分系统开发,那大家看过这个分系统开发没有,你比如说你在网上,你你看呃,京东的呀,或者淘宝他这个域名,它是不是一个一个地方。
08:06
一个还是两个,看过没有啊,没注意是吧,大家看一看。嗯。比如说就看京东吧,来看一下。哎,那我们要看京东的话呢,直接拼一下。往前删一下,好,那我们来这儿看一下啊,它这个的话呢,是IP是39.95.50.131,是不是这个地方,你看嗯,WV6GC cing是吧,Cing不是云的意思吗?啊叫com,那再往下来看还有哪一块,你看到登录这个地方,它是不是又来了一个。
09:12
是吧,啊,又来了一个,你到这儿是不是再听一下对不对,好听好看看大家看一下,那么在这个的时候,如果说他们是在一块儿,是不是它的IP应该是一样的,是不是你看啊。他是不是又跑到了11.206.227.92呀,对吧,我一个比如说我一个这个登录它就是一个服务器,好再往下来看还有哪个。其他的我们就看几个,你有没有,是不是还会注册之类的。这是不是又是一个?诶,这个行像和上面是不是一样的,36110181不一样吧,是不是啊,不一样啊,那我在这个地方呢,就简单的看了三个,就是说呢,对于这种大厂来说,它的每一个子系统是不是它都做成一个服务了,好就是模块啊,模块与模块之间,那么我们看一下啊,它的地方是不是有什么,你像之前的时候有这种订单系统,我直接叫什么呀,是不是库存呀。
10:26
对不对,那有没有可能会出现问题呢?大家想一想。就是说我直接用订单来调这个库存,有没有可能出现问题?有人不知道是吧,有可能吗?对吧,因为在这种情况下,订单系统和库存系统之间是吧,它的耦合度是不是比较强啊,这种就是耦合度啊,我直接订单系统我调谁啊,库存系统这是一种直接调法,直接调用法啊,它的耦合度。
11:01
比较强明白啥意思,不明白是吧?啊把这个图啊。呃,我就不再发了你们。看一下什么意思呢,假如说咱的订单系统歇菜了,我们的订单系统歇菜了,我问你库存系统,他能不能搜到这个数据啊。不能是吧,对不对,或者说是库存系统出问题了,你订单系统是不是也发不过去呀?好,那这个时候呢,我已为引入了一个叫什么呀,消息队列,我订单系统我要发这个订单,我可以怎么样啊,我是不是可以发个消息啊,对不对,你这个时候你先不用关注啥是消息,你是可以发一个消息吧,对吧?哎,我要下一个单,我发到这个里面,我再下一个单呢,再放到这个里面,还有其他客户呢,也可以放到这个里面,假如说你这时候订单系统你歇菜了是不是,那你歇菜之后呢,你这个库存系统和消息队列是不是,这是不是还可以来一个服务器啊。
12:09
对不对,那这个服务器是不是信息还可以往这个地方进行传递,对不对,大家看一下这个时候我们是不是就利用这个消息,这消息队列这一块,实现了一个订单系统和库存系统的一个结耦啊。对吧,哎,哪怕任何一个系统它挂掉了对不对,我是不是不影响另外一个系统的使用。是这样的吧,好,这个就是第一个啊,这能不能理解。你看到没有,就算某一个系统啊,大家也不要认为是什么库存系统或者订单系统,你就算任何一个系统出现故障,这个消息队列我也可以保证什么呀,消息的可靠传递是不是好,这第一个叫什么,它解决了是不是应用解耦啊,OK啊呃,第二个叫做异步处理。
13:07
啊,异步处理,异步处理呢,他在这儿直接画了一个这个图啊,这个图画的它没有怎么体现出来,这个异步处理啊,它是直接是你看啊呃,用户注册到服务器发送信息。啊,我们看一下。先看看吧,看这个图案能不能,嗯,解释清楚啊,首先是用户注册是吧,起入到服务器发送注册邮件,然后呢,发送注册消息。好,传统的方式是什么呀?是不是这个串行方式,这种是不是串行方式。是这样的吧,啊串行方式,那么还有一种呢,是这种并行方式,呃,串行方式呢,就是就是下面这个图看到没有啊,那这时候呢,有一个问题,说这个邮件短信它并不是必须的,它只是一个什么呀,是不是只是一个通知啊对不对,那只是一个通知,那这个通知的话呢,就是客户他有的时候是不是需要等待呀,是吧,你们发完这个邮件之后呢,再发这个。
14:15
短信啊,我需要这个等待,那我再看一下另外一个方式啊,那另外这个方式的话呢,是这样的,就是我采用一种并行的方式。串行是不是来了一个之后再走另外一个呀,是吧,并行方式呢,就是我可以将这个注册信息我写到数据库。是吧,哎,我写到数据库,然后的话呢,怎么样啊,他在发邮件的时候同时怎么样啊。发了一个短信是吧,是不是,哎,发了一个短信,然后再往下来看啊,说这为啥可以提高效率呢?你看啊,他这个地方实际上就是一个响应,谁的响应呢?是给客户的响应,明白了吧?诶给客户的响应好大家看啊,这个图是这样的,就是如果说我们采用上述这种方式,这是不是一个50ms 50ms 50ms,最终这三个过程完成之后,返回给客户这个信息,就是假设啊,他都需要这么多的时间,是不是需要这个。
15:20
150ms这个时间呀。OK, 那另外一个呢,就是说我这个地方是需要50ms,那它完了之后呢,同时。同时做一个发送注册邮件50ms,他也做了一个什么呀,发送注册信息。对吧,好,那在程序啊,大家注意啊,把这地方实际上忽略了一点,就是说我写一个程序是吧,我程序呢做一个判断,那这个判断是什么呀,以上三个任务都完成之后,我再怎么样啊,我是不是返回给客户一个信息呀,对吧?啊,只要你你也成了,你这个也打到对勾,你这个也打了对勾,这是不是也是OK了,对吧?啊,我们用一步的这个方式啊,只要这三个都成功了,客户这个时候怎么样收到这个信息。
16:13
啊,收到这个信息啊,OK, 大家看一下他这个时候时间是不是就提高了50ms啊,这是单用户的好吧,就是这个图啊要理解。OK, 这叫做异步处理是吧?嗯,好,那再往下来看啊,还有一个就是说我们这个地方消息队列是吧?啊消息队列他说了一个消息队列,这其次呢,就是呃,消息队列啊。好,往下来看啊。上面的话呢,它这个地方完了之后啊,再往下来看,上面的话呢,是写完数据库之后的这个操作,你看啊,下面他往这儿来了,往这儿又加了一个操作,这个操作呢,有人今天说的是什么呀?是不是消息队列的方式啊,说完这个完了之后呢,你看啊,他说把这个发送邮件啊短信,它并不是必须的这个业务逻辑,然后将这块的话呢,它不是必须得一个业务逻辑啊,Java这个业逻辑,那么怎么样呢?放到这个消息队列,由消息队列服务器来操作什么呀,发送邮件和服务,最终这个时间呢,提高的。
17:25
更更高啊,多少。55ms是吧,啊这个了解就可以了,这个一般的不说,因为用的时候,我们最终用的时候就是什么呀,就是消息队列是吧,主要说的话呢,就是有一个就是叫做异步处理啊,就是异步处理这一块OK。那还有一个点呢,叫做流量。削峰或者叫做流量的削峰,好来看一下这个是什么意思,那么流量削峰或者削峰呢,它在秒杀,注意看啊秒杀。一般比如说是这个电商,电商是不是有秒杀呀,对吧?啊电商就最开始什么双11啊双12啊这种活动,那现在的话呢,是不是还有这些抢票啊。
18:10
对不对啊,我们抢呃呃车票是吧,放价抢车票,或者像之前的时候呢,出现一些呃抢门票啊,或者说是这个一些举办活动的时候,他的就是这种场景,其实就是什么场景啊。嗯,这种场景,这种场景的话呢,就是资源怎么样啊少是吧,然后流量怎么样,是不是流量大呀,啊资源少流量大,那么针对资源少流量大的情况出现了,瞬间出现了什么呀,过多的请求,他就有可能怎么样让我们这个系统是不是进行宕机呀。对吧,OK, 那怎么样来解决呢?他这个地方解决的方法就是来控制什么呀,控制活动的人数是不是啊,我们来控制活动的人数啊,当超过一定阈值的时候,我这个订单啊,我可以把它舍弃掉。
19:13
你想啊萧峰,比如说你这个地方,你需要你这里面啊假设啊,咱这里面呢,是10万是吧,哎2万吧,比如说2万啊,现在有2万用户同时呢下单,然后他只能怎么样啊,他只能接受1万,大家想一下,在这种场景下,它会怎么样,它的我们的服务器是不是会宕机呀,是吧?哎服务器宕机,那服务器宕机是不是所有的用户。他是不是都没有体验了,对不对,哎,他都买不成了啊好吧,那这时候怎么办呢?我们就可以引入消息队列是吧,我们将一部分将这个数据,比如说你看用户请求,比如说就来了1万吧,假如说就来这1万,我是不是可以放到这个队列里面。
20:13
是吧,啊1万来对列,然后呢,他们依次怎么样啊,是不是获取这个资源,对吧?诶依次来获取资源,应该说那还有一部分呢,还有一部分怎么样,是不是等待呀,是吧?哎等待我们可以给他一个信息啊,可以给他啊给这个客户这个信息说怎么样啊,已经怎么样啊,比如说你这个下单成功,是不是下单成功。对吧,后面这个信息呢,给他做一个延迟啊,其实就是延迟,那其他的话呢,就是前面的这这一半用户,他是真正的什么呀,是不是下单了呀啊。哎,这就是一个消峰啊,一个消峰好在哪儿呢?引入一个什么消息队列是吧,你看那这种情况下其实就像什么呀,我们在超市结算一样,你不能一窝蜂的都到收银台,怎么样做一个排队是吧?哎,一个一个的处理,OK.
21:19
好四个四个点啊好吧,这四个点。
我来说两句