00:00
好,前面呢,我们测试了一下启动时检查这个配置,接下来呢,我们再来给大家测一个叫timeout,这个timeout呢,顾名思义这就是超时设置,超时它是用来限制什么呢?哎,我们来说一下超时它呢是我们在服务消费方来引用我们服务提供方的时候,可能由于网络原因等等,服务提供方呢,要执行一个方法可能会有很长时间,如果很长时间都没有返回,导致大量线程都在这阻塞,那可能会引起性能下降,那我们为了。解决这个问题,我们可以指定上超时属性,只要你这个方法在指定时间内没有返回,那我就立即终止啊,不让线程大量阻塞,比如这个超时呢,它在这的设置单位是我们这个毫秒,我写一个3000,那就是呢,我们默认呢是三秒,那我来写一下我们这个服务提供者啊,假设呢,我们服务提供者的这个方法,我来给他税上。
01:08
四秒sleep。Sleep,好,我来写一个4000,我让这个方法呢顺上四秒,我来surround with看吃。把我们的服务提供者我们先来注册进来,哎,我们先启动注册到注册中心,然后呢,我们的这个服务消费者再来调用我们这个提供者的功能,我把这个调用代码打开,但是呢,大家注意,现在呢,我在这配个超时属性,哎如果没有配置超时属性,那我们就在这得等待这个调用完成。好,我们来启动起来,可以看一下。好,我们这个用户ID1已经进来了,但是这儿出现了报错,我们来看一下这个报错,哎,这个报错呢,他说等待咱们这个服务端响应,等待服务端响应呢,诶已经超时了,但是我们并没有在这设置超时时间啊,那说明它这个超时呢,有一个默认值,我们可以看double reference,嗯,我们来到文档里边,这来到我们这个sIgMa参考手册,找到double reference reference,然后呢,我们来看它的timeout超时,这是一个可选属性,Time呢,默认是使用的是double consumer里边的timeout,那我们就来看consumer里边time呢,哎,我们发现啊,默认是1000,也就说double为了考虑我们这个服务快速响应,那么给它默认超时呢,设置为1000单位呢,是毫秒。
02:45
超时默认。默认是1000毫秒,好,那么我们呢,可以来设置一下,我写一个timeout timeout如果我们设为3000毫秒,这样呢,也是超时的啊,我们这个方法呢,需要我们来看一下,诶,需要在这至少睡四秒才能出来,所以呢,我们为了能调用成功,那你可能这个超时得写一个5000毫秒来,我们就来示范一下。
03:15
好,我来测试一下,看我们现在的这个调用能否完成呢。走。当我们把它的超时时间调大了以后。哎,我们发现这个调用完成,说明我们的超时属性设置有作用了,那么超时属性只能在这设吗?同样的,我们知道double reference设置是为单个设置的,那double consumer是全体设置的,哎,我们可以在全体里边设置所有的这个潮时,但是他们的这个规则到底是谁起作用呢?后来我们来可以看一个文档,我们的插面配置里边啊,我们插面这个配置,插面配置里边有一处呢,叫配置的覆盖关系,下面这张图呢,就解释了我们配置起作用的优先级,那在最上边是最优先起作用的,越下边呢是后来才起作用的,好,我们来看一下啊。
04:15
我们的这个超市属性啊,其实不只能配在我们这个reference标签上,像我们以前的这样子还呢,这个reference标签里边还能有一个叫double method method呢,来精确的配置方法,配置什么方法呢?配置我们user service,比如就是这个方法,把方法名写上,明确指定这个方法的超时时间,比如time out等于。3000,哎,我们就写一个1000吧,那这个超时时间,我们到底是1000生效还是5000生效,哎,我们我们想想啊,如果1000生效的话,那我们要睡四秒多,那这样我们就调用失败了,5000生效那就调用成功了,我们现在重新测试一下。
05:04
走。哎,我们发现呢,这是一个调用失败,响应超时,那也就是说我们明确指定方法了,那就精确有限,然后呢,这个是全局配的,我们这个user service里边可能有其他的方法,那都没设置,也就是说总结一句话,方法及优先接口次之,全局配置再次之。什么叫全局配置?我们这是配某一个接口的user service,我们还可以用consumer来配置所有接口。Time out,哎,我给这写一个5000,哎,那谁优先呢?我们肯定是方法精确优先,如果没配方法了,如果我们这个煮掉了,那就用这个time out,如果这个他们out我们也没配,那再用这个consumer,也就说始终记着我们这个配置什么生效。
06:04
的两个规则。第一个叫精确有。哪个最精确啊,能精确到方法集,那肯定用它,接下来第二个我们来看啊,除了我们在这引用服务,比如说我们在服务消费者里边,我们要以调用提供者的服务,我们是远程引用提供者的服务外,我们服务提供者本身,哎本身呢,它自己也能指定超时属性,本身它给注册中心注册了一个服务,它也可以加上time奥,比如它本身呢,就是1000啊,本身呢,说我们这个user service里面的方法啊,超时是1000毫秒,那我们服务提供者它本身调整的这个超时有效呢,还是我消费者在这儿指定的超时有效啊,我们消费者指定了5000,那如果是提供者的1000有效,那就是应该是调用失败,如果是消费者的5000有效,那就应该是调用成功来测试一下。
07:06
这是一次成功的调用还是失败的调用?哎,我们发现呢,这是一次成功的调用,说明我们消费者端的这个超时设置有用了,所以说接下来这是我们第二个规则,就是呢,消费者。设置优先这两个配置呢,其实就是我们文档这一块说的,哎,第一个方法及优先接口及次之,全局配置再次之。和我们第二个叫。如果级别一样,则消费方优先,提供方辞职,哎,这是我们总结的两个,那么具体呢,就是我们的这个,这张图我们会看到有double reference配置,这个是我们在服务的消费方,我们要引用远程服务的时候,我们用reference,然后呢,还有叫double service,这是服务提供方暴露自己服务的时候用double service,而我们说是reference是我们消费方引用设置优先,而我们这个提供方自己的设置呢,哎,它不优先,然后呢,接下来还有一个叫double reference跟,诶我们这个上边的reference跟service一个,呃,引用一个提供方,但是呢,他们是方法级别的精确级别,而下边呢,是我们这个接口级别,我们是整个设置什么什么接口的,而在下边是我们叫consumer跟。
08:43
Provider,哎,我们都说过,以前如果一个一个设置咱们这个,哎,Reference这个太麻烦了,我们可以用consumer来设置统一的reference属性,包括在provider里边也一样,一个一个设置service也太麻烦了,可以用double double来找一个啊,有一个叫provider来统一设置我们这些属性,比如他们奥5000。
09:10
一千八好1000,这个呢是统一设置服务提供方的规则,统一设置服务提供方的规则,而我们整个这张图能看到的顺序就是方法级别是在最上边,接口级别在中间,而两个呢,统一的全局配置在后边,那么额外的呢,我们来看一下啊,每一个层级里边都是消费方的配置优先,提供方的配置次职,哎,这个层级接口级也一样,消费方的配置优先,我们这个暴露接口次职,哎,下边的这个全局也一样,是消费方的这个消费者配置优先而提供着的配置次值。另外呢,我们再来看一个啊来我们来到这儿,我呢把以前的先都关掉啊,大家一定把以前的都先关掉,来测试,我来做另外一种配置,如果我在服务的消费方,哎,消费。
10:11
地方呢,我配了一个啊,相当于这个接口级别的这个超时是5000,而我在服务的提供方,提供方我配了一个方法级别的精精确,我们在这儿啊,方法级别的精确我用double method。来,就是这个方法。我们呢,给它精确到以前。那请问现在。到底是按照精确优先还是消费者设置优先呢?哎,如果按照精确优先,那我们就应该来到咱们这个服务提供者里边,因为他精确的指定了方法是以前,而如果按照消费者优先,那我们这个消费者呢,啊,他没精确,但是他呢在接口机它指定了是5000,我们看一下哪个能调用成功,一定把之前应用都停掉,然后呢,我先来重新来注册我们这个服务的提供者。
11:14
好,注册进来以后呢,我们来重新来调用服务的这个消费者来看这是一次成功的调用还是失败的调用。哎,我发现呢,这是一次失败的调用,那说明我们在服务提供者里边,在方法级别的这个1000精确是起了作用了,而我们这个消费者呢,并没有优先起作用了,那为什什么是这样呢?就是由于第二句话,级别一样的情况下才是消费方优先,而我们级别不一样,一个都已经精确到方法级了,另一个才在接口级,所以说不管是你配在哪一方,一定是方法及优先的,包括我们参照这个图,后来大家配置不知道哪个优先呢,就来参照这个图,如果说像刚才的场景,我呢给咱们这个服务的消费方,我们在引用的时候,引用提供者服务的时候,我配了一个超时和服务的提供方在方法级别,哎,服务的提供方那就是这个,哎service,那在方法级别配了一个超时,谁起作用呢?明显看到上面这个它在上边。
12:26
它会起到作用,要说呢,我们只是以time奥特为例,剩下的很多属性,哪一些配置才能生效,都是遵循这两个规则,一个是精确优先,第二个是消费者优先。
我来说两句