00:00
好,前面呢,我们说了一个timeout超时属性,它呢一般配合我们第二个这个叫retre重试次数来使用,重试次数呢,在我们开发中也用的会非常多,哎,我们来说一下重试次数,当我们某一个服务哎,由于各种原因,比如网络不佳或者服务呢运行缓慢等等,导致超时,我们方法调用远程调用失败,我们呢可以通过调整重试次数,让它多试上几次,这个重试次数呢,它是一个整数,但是呢,不包含,不包含第一次调用,也就是说如果我在这写一个三,那么呢,如果第一次调失败了,那他额外呢还会再来试三次,直到这三次以内有一次成功,说最多呢它会是四次,不包含我们的第一次,这个重置次数呢,好,我们就来到我们这个服务提供方,提供方我们呢,为了好看。
01:01
先我们需要远程调用这个方法,只要他一进来,我们就给他打印一个啊,比如user service11,然后呢,我们看重试能不能起作用,目前呢,我们这个超时时间是配在提供方里边的,所以说调用会超时啊,当然配在消费方也行,这个属性配置的覆盖规则我们上节课也说了,我现在呢就来启动来调用,我们先把这个呢,服务提供方我们给它。运行起来啊,让他注册在我们这个注册中心里边,好,接下来呢,我们就来调用我们这个提供方的服务,走他呢会超时,我们来看一下是不是有虫式呢。哎,我发现过了一段时间以后呢,它超时了,然后我们来到我们这个。控制台,哎,我们发现这个user service employment打印了四次,这是第一次失败了,然后呢,他又试了三次,而且这个重试机制呢,它如果在有多个服务提供方的情况下,诶,我们呢,现在这有一个订单服务,然后呢我们来调用户服务,如果用户服务呢,我们放了三个啊我们说这个第一次调呢,它会默认来调到第一个用户服务,如果调失败了,它还能自动的重试一下其他机器里边的相同功能的用户服务是否可以,那我们再来试一下这个效果。
02:32
那么这个充值次数呢,还是三个,我把这个服务的提供方,我们来启动上三个,好,那现在呢,这个服务的提供方,现在第一个,第一个服务提供方20080,我们让它启动。如果呢,它被调用控制台呢,打印的是这个啊user service employment1,然后接下来我第二个服务提供方呢,我第二个再来启用一下,启用之前呢,由于20080端口已经被占了,那用二零。
03:04
881好,我们再来启动一个走。这是第二个,如果调用它,它会打印这个二,我把这个一改,如果第三个它会来打印三,我们来改成20882,现在呢,相当于我有三个服务提供方。走,包括呢,我们来注册中心,我们来看一下刷新,我们发现呢,这个提供者有三份,我们来看一下我们的提供者分别在2088020881 20882,他们呢,都是什么点进来,他们其实都是user service,哪个方法呢?Get user address list这个方法好,那么我们来测试一下调用,看它重都会重到哪里好,我们这个方法呢,会超时进行重试。把超市呢,配在了消费方里边。
04:00
好,我们发现呢,依然超时报错,但是我们来看控制台,好,第一个里边,哎,User service1打了两次,User service2打印了一次,就说SERVICE3也打印了一次,二加一再加一正好呢是四次,也就是说我们相当于重试次数,他也重试了其他服务器,由于第一次请求呢,默认就是来到user service1,然后呢,他试过以后发现,诶第一次请求出错了,然后呢,他重试一下,重试一下还出错了,他就不在这一棵树上吊死了,哎,他就直接来到下一个,哎user service2再试一下,它也出错了呢,那再来到下一个user service3,如果你有很多个,它在我们重试次数以内,只要有一个调用成功,那我们本次也就调用成功了,这是我们说的重试次数。它呢也应该在合适的情况下再来设置,什么叫合适的情况下呢,我们说一般啊,我们将方法可以分为幂等操作。
05:06
密和非密等的。那我们希望呢,我们设置的是在幂等操作的方法上,我们可以设置重试次数,设置重试次数哎,来提升系统的性能,而在分泌的方法上呢,我们要不能设置重试次数。什么叫幂等,什么叫非幂等呢?所谓的幂等,也就是说方法不管运行多少次,它的结果最终都是一个效果,比如我们查询,特别是你操作数据库里边的查询啊,或者呢,我们这个删除其实也算啊,我删一次,下一次我要删,其实上一次已经删过了,不会再影响,影响新的变化,然后呢,包括修改也应该是,也就是说那同样的一个请求,同样的一个方法,带同样的参数,无论执行多少次,它们产生的效果跟你执行一次产生的效果是一样的,我就把这种操作叫密等,而与之对应的非密等就是我们这个方法呢,运行,每一次运行都会产生新的一些效果,比如我们这个数据库的新增。
06:24
我们呢,不能让他重试啊,第一个比如他啊超时了,他要五秒超时,结果超时了,其实呢,他在超时中断方法的时候,数据库呢,添加请求已经进去了,我们数据库呢要执行,只是他等不及了,然后呢,他下一次又去重试,又给数据库把请求都发过去了,数据库正在执行了,下次呢又这样,所以说呢,我们在操作多次以后,你会发现数据会库把这条记录呢,会多做很多遍,而查询、修删除、修改就不一样了,无论多少次查询,同样的一个记录永远都这样,而修改、删除呢,那也是第一次,我们删了以后我再删,那其实跟运行一次的效果是一样的,包括修改我们也应该做成密等的,那么后来在设计系统的时候,就应该将这些们设计成一些密等操作,可以允许重试次数,而新增呢?我们不应该让它重试重。如果不想让。
07:24
同时,我们只需要调为零就行了,零代表不重式。出错呢就出错了。
我来说两句