00:00
好,那上面那堂课呢,我们学习了,在获取验证码的过程当中呢,去先来校验手机号有没有进行注册,那么我们校验的具体的过程呢,就是在我们获取验证码的时候,所以呢,我们打开我们的SMS啊,我们找到我们的controller,那在这个地方呢,我们获取验证码的时候呢,去判断了手机号是否注册,那么大家有没有想过一个问题,现在我们这是一个远程调用,是SMS这个微服务调用,靠流域服务,那么远程调用的过程当中呢,很有可能会出现远程的这个靠服务器由于种种原因,它迟迟没有响应啊的这样的一个问题,那么如果远程的服务器没有响应,我们不想让他影响我们的啊,当前的客户端也就是SMS啊这台服务器啊。对这个本地的代码的一个后续的执行,我们呢其实是可以对远程服务做熔断处理的,那么我们需要考虑的就是对远程的这个调用熔断啊,会不会影响到我们本地代码的后续执行,或者是说我们本地代码的这个业务会不会受远程熔断的影响啊,或者是说如果远程熔断了,我们这个代码是不是就执行不下去了,还是如果远程熔断了我们的这个代码呢,还是有一些备选方案的啊,如果我们这个代码可以有备选方案,我们呢,可以对远程做垄断啊,如果没有任何备选方案,那么我们远程他响应不了了,那可能我们呢也要做一个熔断处理,但是本地的这个代码呢,可能也要做一个错误,就是报错了对吧?啊好,那现在我们来思考一下,假设说我在这个位置判断啊手机号的时候。
01:50
远程的这个靠啊,正好就就就这个瞬间啊,就没有响应了,或者是瞬间达到这个流量顶峰了,没有办法给我们正常的一个响应了,那么我们这面嗯,SMS是不是也要等待它的响应,如果我们SM继续等待它的响应,那么其他的这个。
02:11
这个接口或者是说调用我们MSSMS的其他的微服务,是不是也要继续等待?那这个就是之前咱们大家了解过的雪崩现象了,对不对,那么我们为了阻止这个雪崩现象,那么我们就会去采用这个熔断啊,那么我们先来思考一下,咱们怎么样去熔断它。首先呢,就是能不能熔断啊,能不能熔断呢,就是如果手机如果这个service,靠这个微服务它没有响应了,我们马上把这个熔断了不去。判断了我们能不能继续去执行验证码的发送,这肯定是可以的,因为我们原来就没有去判断直接发验证码对不对,那我们就这样做啊,假设说远程的服务器当掉了,那我们干脆就不建言了,然后我们直接先给用户把验收码发过去啊,那无非就是两种情况嘛,第一种情况就是这个用户确实没注册过,那他收到验证码了,那这不就是一个皆大欢喜的结果嘛,对不对?好,我们也不用去判断。第二种情况呢,就是这个用户呢,确实已经已经注册过,那这个地方因为熔断的原因呢,没有检测出来他已经注册过,依然把验证码发给用户了,那这也没关系啊,那用户呢,在注册的过程当中,他还会再去校验,所以说不定用户注册的时候呢,那那面的这个流量这个峰值的问题已经解决了,我们就可以访问斯维斯考了,对不对,那在注册的过程当中,咱们再访问S,那么就避免了一次什么呀,用户的一个远程定。
03:44
失败好,所以呢,在这个地方我们就做一个熔断处理啊,那如果要针对它做熔断处理的话,那么在check check mobile这个地方啊,在这个接口这个地方,我们就要给它添加一个备选方案,那么备选方案呢,我们就意思呢,就是当远程调用这个接口的实际的服务器啊,这个接口所在的实际的服务器在这它当掉了,或者是短期没有响应的话,我们本地呢,会给他提供一个备选,那么我们本地的备选呢,啊,就是对这个接口的一个实现了,好那么我们在SMS里面。
04:20
Client里面我添加一个fall back啊fall back呢就是回调的意思啊,什么时候会对这个fall back发起回调呢?就是当远程接口没有办法调的时候,然后呢,我们在这面呢,嗯,对它呢做一个。实现啊,所以说呢,我们添加一个类,这个类呢,就叫做how userin for plant for that好,然后接下来呢,用它呢来实现我们的Co user plant,好,然后接下来呢,它实际上就是我们的一个service,它就代替我们的远程服务的一个真正的内容了啊好,然后接下来呢,我们一会打印个日志出来。
05:04
在这边呢,我们对这个方法呢进行实现,那么远程check box check mobile,如果没有,我们就在这儿去实现我们的方法,那这我们实现什么呢?我们就直接是什么意思,叫做手机号不重复我们给他。这样的一个结果,因为我们远程就不是返回处,就是返回false嘛,那么我们就认为远程返回false,手机号不重复就直接熔断了,本地有一个什么呀,有一个替换的结果啊,有一个替换的结果。好啊,然后接下来呢,呃,我们在这边呢,再打印一下。直接远程熔断,然后本地来一个替换的结果做补充,然后呢,这样的话呢,大家看如果是这种情况的话,我们在前端。
06:07
我们在前端啊,就相当于这个降级了嘛,相当于功能降级了啊,正常情况下我们应该去检测手机号是否已经注册,但是呢,因为远程发生问题,我们直接熔断它,那么我们的功能就降级,就不检测了,我们认为无论在不在,我们都认为它不存在,不存在的话,那就正常发短信就可以了,只不过就多发几毛钱的短信钱对不对?好,这样的话给用户的体验会稍微好一些啊,省得他呢,在这个发短信的过程当中,迟迟啊收不到短信,然后再迟迟也不知道到底是注册过或或者是没注册过就执行不下去了啊好,那这是我们的一个啊服务熔断啊的一个。这个类的一个开发,然后最后呢,在我们这面的时候,会导致我们的应用的功能降级好。那。
07:01
我们还要把刚才我们的这个芙蓉断啊,这个配置到我们当前的这个啊,靠优色的这个位置,那么在这块怎么配呢?我们去添加一个叫做fall back的这么一个属性,然后把刚才咱们写的这个啊功能降级的这样的一个类呢,给它写到这,好写到这之后呢,我们这个容错类呢,啊,就算创建好也配置完成了,好,那接下来呢,我们就可以做一个测试了。
08:00
好,这面呢,我们就启动完成了,启动完成了之后呢,大家看,那现在呢,我就模拟一下远程的这个服务呢,它就啊高并发,然后呢,他就没有响应了,或者是直接就当掉了啊到了好到了之后呢,我们在这个地方呢,就直接点击获取验证码,那很显然这个用户实际上是已经注册过的了,是不是你们点击获取,获取完了之后呢,那么。嗯,稍等啊,我看一下。正常情况下呢,它其实不应该,嗯,响应服务器内部错误,应该响应什么呀,应该响应我们的,呃,就是发送短信成功是吧?啊我先重启一下啊看一看。好,然后呢,刚才我们这个代码都写完了,那为什么他会响应这个服务内部错误呢?很显然我们的代码没问题,但是熔断功能没有没有好使,那熔断功能为什么没有好使呢?因为熔断组件我们没有加,是不是啊,加熔断组件啊,在这个位置,Service base这个位置,我们应该把服务熔断的这个spring cloud start,阿里巴巴3INNO啊,这个依赖呢,先给它添加,就是这个很重要啊,要不然你代码都写完了之后,你依赖没填,它不会走熔断的,熔断跟干脆就不会生效,所以呢,我们在这面呢,还是在service by base当中。
09:35
当然了,这个服务熔断实际上是被谁需要的,是被SMS需要的啊,因为我们未来可能还会有其他的熔断,那所以呢,我们就干脆填在service当中。好,这是这一款。然后接下来呢,就是第二个还要配一个对这个芙蓉段的支持啊,那这个对芙蓉段的这个支持呢,我们把它放在TH这个节点下,叫sentinel enable to。
10:08
好,我们找到分节点。找到我们SMS的分解点。那么在这儿哈,听到最下面。好,这样的话呢,我们就写好了,写好了之后呢,我们再把啊这个SMS呢,再给它重新启动一下。好,嗯,稍等啊。好,然后接下来呢,我们来看这面,那刚才呢,因为我们的服务熔断就没有生效,所以我们获取验证码的时候呢,上面这个地方就展示了一个提示信息,叫远程服务器错误,那你这个用户体验就特别不好,对不对?好,现在呢,我们这个服务熔断呢,我们彻底把它整合进去了,接下来呢,我再点击获取验证码。
11:09
然后呢,大家会发现短信发送成功了,也就是说直接啊对这个远程的没有响应的服务进行了一个熔断处理,然后本地的功能我们对它进行降级了,大不了就不检测手机号了,我们就先把短信发出来再说,然后呢,用户注册的时候,说不定那个时候问题已经解决了好,那么在注册的过程当中,我们再去啊,调用远程的服务器的这样的一个功能就好了,是不是啊,所以这块呢,就是对服务熔断的一个啊很就是典型的一个应用啊。
我来说两句