00:00
啊,当然了,说起这个事儿哈,咱们捎带的再提一个什么哈。我们说了这个是分布式系统,就会有这个问题。啊,就会有这样的风险,只不过微服务的话呢,可能倾向于哈,把这个服务拆分的小一点,它的各个模块呢,可能会相对多一点。但是这个并不是一个实质性的问题啊,那么说你分布式的就会有这个风险,那这个时候就是如果是你我们用的是打包呢。如果我们用的是这个double的话,Double怎么防范这个问题呢?其实这个很简单,Double也可以去,他也有办法啊去整合这个。就我们现在说的这个,那double整合res的话,就是那double也可以借助res去做熔断和这个降级。啊,所以double的话,它面临这方面问题,也可以用啊。所以说high呢,像这种吧,它不是说spring cloud里边的话,就只是能在spring cloud里边来用啊,它都是一种这个独立的这样的这个技术,你要能整合进来,你就可以用啊。
01:00
这个我们做这个熔断的话呢。说熔断是针对雪崩效应的一种服务,微服务链路保护机制啊,这个这边就不念这个了,呃,我们看一下这个代码怎么写哈。正常去调用我们的provider。呃,正常去调provider呢,然后呢,我们这边呃,Get就是调调一个方法,正常调一个方法,这个方法如果出问题的话,抛异常了或者超时了的话呢,哎,那么我们就去调另外一个方法啊,这个另外一个方法,这个很重要的一个是让另外一个方法和我们原本的方法返回相同的类型。为什么要返回相同的类型呢?你返回的数据类型要是不一样的话。就是consumer呢,本来要调这个,可是你现在如果调另外一个方法,返回的是另外一个对象的话,Consumer这边这个他就没法接收这个数据。我,我想要的是一个banana。
02:00
结果你给我的是一个tIgEr。啊,那你这玩意儿我进行转换,我也转换不过来呀。是吧,我就consumer就没办法继续去执行后续的操作了,我们为了让这个,为了让系统安全,Consumer必须得能够继续往后去走,继续走它后续的操作才行,所以说呢,得用返回要相同的类型。啊,发为相同类型。而且这个返回相同的类型呢。你像我们要返回,同样都是返回employee的话。这个还没办法让他去知道我们出了什么问题。我们还没办法让他去知道出了什么问题啊,我如果在employee里边,EP内。里边啊,它正常的,假如说返回汤姆这个出问题的时候呢,我们让他去返回一个,呃。返回一个消息说这个,呃。The。Provider。
03:03
Some。Problem。等等吧,啊,就告诉他我这provider出问题了。这个还不太不太好。因为啥呢?因为你这个放在employee name里边,你还是返回了一个employee。别人拿到employee呢,他如果写代码粗心一点,他不去employee内幕里边呢,去做这样的检查,他也不知道出问题了,他还以为是好的呢。他就把这个这个返回的employee当成一个好的对象去用了,可能就把这数据呢显示到页面上了。啊页页面上用户想要的是汤姆这样的值,结果你给人家返回一个这样的值,这个这个就感觉非常不好了。那么大家想一想啊,所以说我们现在的这个希望是这样的,这个方法的这个返回的这个类型啊。他执行成功的时候可以返回这个类型,失败的时候也能返回这个类型。
04:00
失败的时候还能带上一个消息。告诉你出了什么问题了,还有一个属性呢,可以告诉你成功还是失败了,哎,如果说你成功的话,你要查数据的话,我还能把这数据还能给你带带过去。没感觉吗?没感觉吗?用个什么东西啊在这。用一个我们以前用过的。不叫rest。Result。对吧,你看这个时候他是同一个类型,你成功的时候我也反馈这个类型,你失败的时候我也返回这个类型,那我咋能知道你成功还是失败呢?我用你result这个属性,看你是success还是fail的。就知道你是成功还是失败了。哎,然后呢,你要是失败的话呢,我这边有message告诉你出什么事了,你要是成功的话呢,你是查数据的话,我有data告诉,就是把数据反馈给你。这就兼容了,就是你正常调用也也能够兼容,你这个失败的调用也能够兼容。
05:02
所以在这儿呢,这个时候吧,其实我们分布式交用的时候,哎,咱们还是统一,咱们都使用result edit,哎拿到result editity里边以后呢,Consumer这边拿到以后,可以根据result去判断是成功还是失败。啊,这时候就是返回同样的类型,那么consumer呢,拿到同样的类型的数据,他后续就可以继续操作了,啊,就不用去考虑这个。呃,就就就不用不需要在这傻等着啊。所以说在这儿呢,我们这个方法吧,咱们需要让它的返回值设置为nity这样的这个返回值。哎,这是咱们先说一下这个事儿。然后以后,然后这样的话,咱们后续哈,就可以继续继续去做做操作了啊,这个result ad在这我们已经准备好了哈。
我来说两句