00:00
前面我们测试使用center来做了服务的熔断和降级,当然呢,我们现在被熔断和降级的这些服务,我们默认的都是这些请求,它扫描到的这些请求,那我们可不可以自定义的去来保护一个资源,那我们可以来参照它的这一块如何使用那们自定义的来保护上一段代码,比如在这儿定义资源,除了对主流框架的默认适配,也就是我们这些请求就是定义需要保护的资源外,那么自己呢也可以定义,那么常用的呢,就是这种方式抛出异常定义资源,比如我们可以使用一段TRY看代码来定义我们这段资源,起一个资源的名字以后,我们就可以来定义这个资源的规则了。那还是以这个秒杀为例,我们在这个controller里边,我们接下来就要测试我们第五个自定义,自定义受保护的资源。我们来以咱们这个controller为例,好,还是我们的这段代码,比如我们这段查询当前所秒杀的商品的这段代码,我们来到业务逻辑里边,业务逻辑里边呢,假设我们认为呢,这段资源它的性能耗费的比较长,所以我们就可以来这么来写,来写一个串代码,然后我们来try catch。
01:15
主要呢,它一被限流以后,就会抛出一个block exception,好,我们现在把这段代码呢,我们可以包含在这个里边。而且用我们这个现在的方法,我们定义的这个资源,我们写在这个里边,让它自动关闭,那有一个方法叫SP类,它呢有一个方法叫我们可以来定义一个资源,它返回的这个资源呢,也是需要关闭的,我们来照这一块,我们来看一下po entry,点一个我们来写一个资源的名字,然后这个资源呢,会最终被自动关闭。那我们就来使用这段代码,我来定义资源的名字呢,比如我们就将second ksqs ctrl c我们复制过来,我们将这个类呢导入进来。那这样我们在这儿呢,就定义了一段需要受保护的资源,那以后呢,我们这个方法的执行,我们就在受保护的这里边来进行执行,那这样的话,我们就可以对它来做流量控制,熔断降级等等所有的策略,然后这一块只要被限流了,那就会抛出这个异常来处理它就行了。我们现在来测试一下我们秒杀服务,我们通过自定义的方式呢,定义了一段资源,他们这个资源能不能生效,而且这个为了方便测试期间,如果我们这个被限制了,我们就可以在这儿来打印一个日志log,点一个error,比如。
02:35
资源被限流,这个异常的原因,我们也可以来打印一下,Get一个message,包括它被限制的这个规则这一块呢,也会有好来重新启动我们的秒杀服务,我们参照我们控制台。控制台这一块我们来开始对它进行一个限制,秒杀这一块我们可以在这儿添加流控规则,添加降级规则,无论添加哪个规则,要指定资源名,资源名除了请求外,那接下来我们自定义的这个资源名也可以来使用了。好,我们现在来做一个测试,我们先来发我们的这个请求,获取我们当前需要秒杀的这个商品。好,我来CTRLC,我们先来访问这个请求,我们来看一下默认效果,等待我们这个服务全部启动成功,把这个关闭,我们现在先来测试一下,我们没有做任何限制的时候,我来刷新这一块呢,都是可以访问的,然后我们来在这一块给他来做一个限制。
03:28
我们秒杀服务的这里边时监控的,之前这个数据有,我们现在来加一个流控规则,包括我们在这个触点电路里边,我们也能看到我们发的这个请求,Current second s QS,它下边还调用了一个受保护的资源,叫second ksqs,我们对这个资源呢,可以单独的进行流控和降级,比如我们来测试一个流量控制,每秒呢只能请求一个,然后我们来点一个新增。我们可以使用这种方式新增,当然我们把这个删除,我们自己也可以来在我们的流控规则里边新增,或者降级规则里边新增,我们在这一块来新增的时候,我点一个新增流控规则,那资源名那就得一定叫我们当时定义的这个资源名CTRLC来复制过来,那么把这一块呢,在这儿来做一个配置就行了,好,单击阈值一,我们来点一个新增,那现在来测试一下,来疯狂刷新,刷刷刷刷刷好,我们现在这个数据呢有了,但降没降级,我们来看我们的控制台这一块,我们控制台这一块呢,全部打印的是这个L资源呢,被限流了,所以我们这个限流的方法呢,相当于就进来了,因为每秒一个,我们不会全部放进来,所以我们就会来到异常的这一块,所以我们在这呢就来测试也是成功的,那除了我们使用这种方式来定义一个资源外。
04:47
我们使用这种方式,Try catch的这段代码,CTRLC,好,我们在这来记录一下第一种我们这个代码的方式,我们是这么来做try catch。我们看到的异常自己来处理一下就行了,Exception这是我们第一种方式,使用我们TRY看自定义一个资源的方式,然后呢,这里边是我们业务逻辑,当然我们接下来应该使用更方便的方式,第二种我们基于注解,基于注解那基于代码呢,那灵活性就很高,我们可以定义任意一个代码片段都来定义为资源,那基于注解呢,它呢就能标注在有限的位置,比如们来参照我们如何定义资源里边的第四个。
05:33
这有注解方式,我们可以通过一个注解叫signal resource,把这个配置到我们任何想要控制的这个方法上,好,我们来CTRLC,我复制过来,那还是来到我们秒杀的这一块方法,那我们现在呢,把这个注解也可以来写在我们任意方法上,那就我们直接来写到我们这个方法,那就叫sent resource,那给这个方法呢,Value来指定我们资源的名字,我们就叫get current sqs,我们就叫resource,好,我们来加一个这个,那这是我们的这个资源,那现在定义了一个资源,那定义好资源以后,同样我们拿这个资源的名,我们也可以对它来做一些控制,而且呢,这个一旦把这个资源控住了,那里边呢都可能都不需要执行了,所以我们现在呢,直接。
06:19
启动起来,我们看一下我们现在发请求的话,我们整个请求链路,如果我们发了这个请求,它里边呢有两个资源,这个资源还调用了这段资源,每一个资源呢,都可以单独来设置流控关系,当然我们也可以来设置它的调用关系的限制,比如我们这个资源必须在入口电路是我们指定的这个入口的时候,我才给你限流,否则别人直接调我们还不限流,等等等等方法呢,都可以来进行定义,那现在来做一个测试,那现在还是来访问我们这个请求,Current second这个请求,然后来到我们的单bird里边来看一下我们整个调用的促电路,那现在能看到这个请求里边呢,调用了第一个资源是它,然后又调用了一个资源是它,只要我们有资源,那就对每一个资源都可以来做一个流量控制,比如我们就在这儿来做一个流控,流控呢每秒一个好每秒一个,那现在控制住以后呢,我再来刷新刷刷刷刷,那发现当我们这个呢,控制住以后,这块默认会。
07:20
抛一个异常,所以我们接下来又可以来指定通过这个block handle了,来指定当被流控了以后,我们可以调用哪个降级方法,所以呢,我们在这儿就使用它这种方式,而且呢,这也说了block handle德了,它呢就是我们这个资源如果被限流降级,各种保护起来以后,被限制了以后,我们就可以调用我们指定的方法,这个方法呢,一般要写在我们本类,跟它在这个方法在同一个类里边,我们指指定方法名,那写好以后呢,我们下边的这个方法签名呢要基本一样,返回值要一样,当然我们这个方法名呢,随便指定在这连接过来,然后我们还可以拿到原函数的这个参数以及。
08:03
我们的异常信息,我们最终返回降级数据,咱们在这呢再来处理一下,如果使用这种方式呢,我们还可以指定一个block handler,当你被降级以后呢,调用哪个方法来处理,比如我们就调用咱们的block,我们就叫block handler吧,好,那们现在就来调用它,那调用它呢,我们这个方法必须跟我们这一块的这个方法返回值是一模一样的,而且呢,参数名也是一模一样的,我们现在呢,参数没有,我们可以拿到的这个返回值,我们叫block看到了,因为我们一旦被阻塞以后,我们来调它参数呢,没有,但我们可以多来写一个,它到底是什么原因阻塞了我们这个异常呢?我们可以来拿到,拿到以后呢,假设我们就return,我们给它返回一个默认的东西,我们就返回一个now,但是我们在这来打印一下log,点一个error,我们这个原方法被降级了,我们就在这打印一下get resource被限流了。
09:04
好,那们现在呢,测试一下我们这个一旦流量限制以后,我们这个方法是不是会被调用走好那们现在秒杀服务启动成功,来重新刷新访问一下我们这个请求,那现在呢,没有加入限流机制,当然我们现在指定了block handler以后,那在这来给它添加一个流控规则,那流控规则们新增流控规则我们的这个资源名,那就是它这个它我们定义的s resource定义的资源名,然后呢每秒一个走,新增了这个以后呢,只要它的这一块被控制住了,我们的这个log l就会打印,而且呢,默认返回一个浪数据,好我们来测试一下,来刷新刷新刷新,好我们现在不知道有没有效果,我们来在这儿看来我们每一个error呢都被打印,我们的get current这个被限流了,所以我们调用了这个默认的回调,这我们可以来使用broke handler来指定我们的容错方法,一旦出现错误以后我就进来,而且呢,它除了使用这个block handle了,我们在这呢提示还可以使用一个for back。
10:04
For bank怎么用呢?它详见我们这个注解文档来点过来,也就说在我们这一块呢,除了来写block,还有一个for bank,那这个block呢,是对我们针对于这个资源的回调,它就是针对于一个方法的这个回调,而for bank刚才他提示他说是针对于我们异常的整个处理,它呢是针对。来看一下,我们撤回到这一块,把它这块提示呢,Block handle了。For back呢是针对所有类型的异常,而block handler呢是就是指定的这个方法降级的时候被调用,所以大家呢,注意一下这两个,那到底要怎么用,们就参照一下它的这个文档来看一下这个forba点过来,来到我们这个注解支持,那现在加了这个注解以后,我们就可以来指定for back,要在抛出异常以后呢,们都可以指定for back来进行处理,而for back呢,函数签名和未置要求返回值和原函数必须一模一样,那就跟block一样,方复法的参数列表跟原函数一样,但可以多一个抛出来的异常类型,然后默认呢,For半方法需要跟我们语言方法在同一个类中,那这么来说的话,我们这个它跟block一样,可以写在同一个类中,但是我们也可以允许它写在别的这个类函数里边,你只要写到了别的类里边,而且呢,别的类里边的这个方法必须为静态方法,所以呢,我们在这就需要指定上两个第一个叫for bank的class。
11:34
你写在了哪个类里边,然后呢,接下来这个类里边的方法呢,还必须声明成静态方法,所以这是for back的使用,那我们就不测试了,两个呢,大家都能拿来进行使用就行了,那以后呢,我们就很方便的,如果我们想要受保护的是一个方法,我们直接呢在它上边标注sentel resource,定义它是一个资源,那么就可以来保护起来,如果呢,受保护的是一个请求,那么就直接什么都不用管,那么所有的请求呢,都会被自动扫描到,但是我们这还需要注意的一个问题就是,如果我们自定义了受保护的资源。
12:10
不论是使用注解还是使用TRY看的方式,我们最终一定要定义好我们这个资源被限流以后,我们要返回的数据是什么,们在这儿可以使用方法来定义,而URL请求呢,我们可以来做一个统一的返回,因为我们在这一块呢,之前做了一个配置,在这使用web call bank manager,有一个叫set URL block,注意这个就叫URL,就是当我们的请求被我们限流了以后,我们返回什么数据,那这呢就有当每一个业务方法,每一个自定义的资源,我们需要单独的来设定他们的这个限流返回数据,那在这也提示一下,基于注解,那我们就来使用我们的这个sentel resource。我们也可以来指定如果一旦发生问题以后,我们该调用哪个方法。但无论怎么样,无论是。
13:02
我们这个一还是二方式,我们一定要配置被限流以后,被限流以后的默认返回,要不然就是我们刚才看见的那个现象,它会报一个错误,那个错误页面,但是呢,我们说URL就不用管了,我们这个URLURL请求可以设置,可以设置统一返回,所以我们在这儿使用它的这个Y8。Call bank manager,我们在这儿来设置一个它的统一返回就可以了,这是我们定义受保护的资源。
我来说两句