00:00
好,前面呢们测试了一下服务降级,接下来呢,我们说一下集群容错,这个容错呢,也就说当我们一个服务远程调用另外一个服务,这个服务出错了以后怎么办呢?我们double支持非常多种的集群容错模式,我们以前呢用过一种,这个呢也是double默认的叫fillover,比如说当我们失败了以后自动切换,哎,我们以前在测试的时候呢,我们A服务叫B服务,当B服务超时以后,我们配置一个重试次数,它呢可以重重新的切换到能提供B服务的其他机器里边,这是第一种容缩模式,我们已经错过了,包括呢,还有其他的容错模式,比如叫fair fast快速失败,然后呢,我们始终只发起一次调用,只要失败了,那就立即操作啊,就像我们以前说的那种呢,我们要设置重试次数,用于那些密等性的操作,而非密等性的。
01:00
啊,比如这些写操作比说不适用,这个呢,我们也应该说过了,然后呢,还有一句叫feel save。那么这个fair safe呢,就是说失败安全,当我们出现异常以后,它直接忽略,哎,他也不做任何操作,直接忽略,但是呢,把这个写入审计日志,还有呢,我们这个失败自动恢复,这个自动恢复呢,就是说当我们A服务调B服务,它失败了以后呢,我们可以后台记录一下,然后隔一段时间定时呢我再来调一次,这个呢就适用于那些一定要成功的这些服务调用,哎,比如我们这个适用于消息通知等等等等,还有一个呢,叫for cster,这个呢叫并行调用多个服务器,我A服务叫B服务,因为有可能会失败,能提供B服务的在三台服务器上或者五台服务器上,我呢同时给这五台服务器都发起请求,只要哪个服务器做成了,那我们就可以用了,而且呢,我们可以通过这个FOX来设置我们最大并行数,我们要同时给几台服务器发,这呢是。
02:07
我对于我们这个实时性要求高的操作,我们可以用这种容错模式,但是呢,我们说这个太浪费资源了,当然还有这个广播调用,这个广播调用呢,就是说啊,我们A服务来调B服务,这样的话呢,我们是B服务的提供者,有四台机器,每一台机器呢,我们都调一遍,都调一遍,而且只要有任意一台出现错误,都认为这是这次调用是失败的,这个呢适用于我们啊例类似于我们要的同步的效果,我们A服务器哎要做一件事情,BCD这几个服务器呢,都要跟他同步啊,比如我们更新缓存,或者呢更新本地日志等等等等,这是呢我们一些集群的容错模式,但是呢,这种我们想要配置,只需要在service reference标签里边,我们把这个容错模式一写就行了,不写的情况默认就是我们失败自动切换,我们以前也测过。
03:07
那这种容错模式呢,也是一些简单的设置,那么实际在开发中呢,我们是来通过整合tricks来进行容错,这个也是在我们spring cloud里边默认整合的进行服务容错的相关解决方案,而这个技术的详细细节已经在我们上规谷古励学院周阳老师讲的cloud课程里边详细解释了,那么就在这呢来用一下,那么如何用它进行服务容错呢?非常简单,先来导入我们s cloud这个tricks的starter依赖,然后呢启用S功能就行了,那我们呢,把以前的服务都先停掉啊,我们来到我们这个服务提供者里边。我们先来导入咱们这个相关的依赖,这个导入呢,我们直接这有一个edit start编辑这个start功能,这个start里边呢,我们来选中cloud里边的这个段路保护啊,这打开这个centricx,它来进行服务容错。
04:11
好,我们把它导进来,导进来以后呢,接下来第二步。我们在这呢,需要来开启我们这个服务容错功能,这有一个enable,这好把它呢开启,这是开启咱们这个服务容错。这个服务容错功能开启了以后呢,那接下来我们这个提供的服务假设呢,哎,我们这个获取用户啊地址列表的,我们也不让它超时了,哪怕说这个服务呢,在运行期间可能出了一些异常,比如我来判断,哎如果说这个慢s random,我们来给一个随机模拟异常吧,慢点random,它会呢产生一个随机数,只要这个随机数呢大于0.5,来只要大于0.5,那我们相当于呢就出异常了,我们来给它模拟抛一个异常,你有一个runtime exception好随便呢来抛上一个异常,那这个服务呢,有可能会在不定期来出现异常,那出现异常怎么办呢?我们只需要呢将这个方法来写上一个注解叫has tricks command,这样呢,我们这个方法就被has tricks进行代理,如果它出了呃异常,我们就可以来进行容错,好,我们服务提供者就写好了,我们把这个。
05:30
提供者呢,启动起来。而且呢,我们提供的这个方法,哎,有hyson克斯来代理来处理我们这个容错异常,那一旦出现错误怎么办?哎,出现错误也是我们这个远程在调用出现错误啊,远程调用呢,在这一块调用user service可能会出错,那怎么办呢?我们还是一样,在我们这个调用方消费者里边,我们也导入这个centric。
06:00
好,我们把它呢导进来。OK,然后呢,我们同时在这一块也要开启我们这个服务容错的功能。Enableric,接下来我们只需要在我们这一块进行调用的时候,诶,这个方法程调用我们这个user service user service呢,可能会出现异常,我们也在这sound with各种等等呢,只需要用一个注解,还是叫trick command,然后在这个注解里边呢,有一个属性叫for半muscle回调方法,一旦我们这个出错了怎么办?哎,假设呢,我们就叫哈,有一个hello方法来进行容错,我们把这个方法呢,CTRLC复制一份。把这个方法呢,来变成hello,这个相当于呢,就是在出错的候来进行调用的,来那调用怎么办呢?我们出错的时候呢,比如我们就来给他return一个now,或者呢,我们自己给他重新扭一个,哎,我们可以给他拗一个模拟的数据a address.as list来给它一个user address,如果出错呢,我们就随给他返回另外一个用户,比如十这个呃,测试地址。
07:21
哎,我们来写一个一测试,好,我们这个number我们也写成测试,哎,我们都是这个测试is default写一个yes,好,这呢相当于出错以后,我们就会来调用这个方法,那是不是这样呢?我们来启动一下这个消费者。早启动。由于我们这个远程调用的user service啊,它有可能会出错,所以说我们来多次调用,看哪一次会出错,出错了能不能走,我们所指定的这个哈方法哈方法在这好,我们来测试一下刷新。
08:03
诶,这是一次正确的调用,再来刷新,哎,出错了,给我们返回的是一个测试地址,再来刷新,哎,这又是一次正确的调用,然后呢,这是一次出错的,所以说呢,我们可以利用ric很方便的来模拟出当我们这个方法出错以后,我们想要给它返回什么效果。
我来说两句