
本章总览加速器的相关知识也可以到网站具体了解一下,有专业的客服人员为您全面解读,相信会有一个好的合作!https://www.tiandiapp.com/ ![]() 本章概述SC G能够现多种关功能,比如路由转发、断言、过滤器、熔断、限流、降级、自定义谓词配置、自定义过滤器等等多种功能。今天,我们就一起来聊聊SC G中的断言、过滤器与熔断机制。 关断言断言的英文是P,也可以翻译成谓词。主要的作用就是进行条件判断,可以在关中现多种条件判断,只有所有的判断结果都通过时,也就是所有的条件判断都返回,才会真正的执行路由功能。 SC G内置断言SC G包括许多内置的断言工厂,所有这些断言都与HTTP请求的不同属性匹配。 基于日期时间类型的断言基于日期时间类型的断言根据时间做判断,主要有个: ARPF:接收一个日期时间参数,判断当前请求的日期时间是否晚于指定的日期时间。BRPF:接收一个日期时间参数,判断当前请求的日期时间是否早于指定的日期时间。BRPF:接收两个日期时间参数,判断当前请求的日期时间是否在指定的时间时间段内。使用示例- A=2022-05-10T23:59:59256+08:00[AS">基于远程地址的断言RARPF:接收一个IP地址段,判断发出请求的客户端的IP地址是否在指定的IP地址段内。 使用示例- RA=1921680124基于C的断言CRPF:接收两个参数, C的称和一个正则表达式。判断请求的C是否具有给定称且值与正则表达式匹配。 使用示例- C=, 基于H的断言HRPF:接收两个参数,请求H的称和正则表达式。判断请求H中是否具有给定的称且值与正则表达式匹配。 使用示例- H=X-R-I, \+基于H的断言HRPF:接收一个参数,这个参数通常是主机或者域的模式,例如**这种格式。判断发出请求的主机是否满足匹配规则。 使用示例- H=**基于M请求方法的断言MRPF:接收一个参数,判断请求的类型是否跟指定的类型匹配,通常指的是请求方式。例如,POST、GET、PUT等请求方式。 使用示例- M=GET基于P请求路径的断言PRPF:接收一个参数,判断请求的链接地址是否满足路径规则,通常指的是请求的URI部分。 使用示例- P={}基于Q请求参数的断言QRPF :接收两个参数,请求参数和正则表达式, 判断请求的参数是否具有给定的称并且参数值是否与正则表达式匹配。 使用示例- Q=, 基于路由权重的断言WRPF:接收一个[组,权重">格式的数组,然后对于同一个组内的路由按照权重转发。 使用示例- : 1: ::8080: - P=** - W=1,2: - SP=1- : 2: ::8081: - P=** - W=1,8: - SP=1演示内置断言在演示的示例中,我们基于P请求路径的断言判断请求路径是否符合规则,基于远程地址的断言判断请求主机地址是否在地址段中,并且限制请求的方式为GET方式。整个演示的过程以访问用户微服务的接口为例。 (1)由于在开发项目时,所有的服务都是在我本地启动的,首先查看下我本机的IP地址,如下所示。 可以看到,我本机的IP地址为192168027,属于1921680124段。 (2)在服务关模块-中,将文件备份成-文件,并将文件中的内容修改成-文件中的内容。接下来,在文件中的节点下的- : -下面进行断言配置,配置后的结果如下所示。 :: ::- : - : ::8060 : 1 :- P=-**- RA=1921680124- M=GET :- SP=1注意:完整的配置参见案例完整源代码。 (3)配置完成后启动用户微服务和关服务,通过关服务访问用户微服务,在浏览器中输入::10001-1001,如下所示。 可以看到通过::10001-1001链接不能正确访问到用户信息。 接下来,在浏览器中输入:192168027:10001-1001,能够正确获取到用户的信息。 (4)停止关微服务,将基于远程地址的断言配置成- RA=1921681124,也就是将基于远程地址的断言配置成与我本机IP地址不在同一个段,这样就能演示请求主机地址不在地址段中的情况,修改后的基于远程地址的断言配置如下所示。 - RA=1921681124(5)重启关服务,再次在浏览器中输入::10001-1001,如下所示。 可以看到通过::10001-1001链接不能正确访问到用户信息。 接下来,在浏览器中输入:192168027:10001-1001,也不能正确获取到用户的信息了。 自定义断言SC G支持自定义断言功能,我们可以在具体业务中,基于SC G自定义特定的断言功能。 自定义断言概述SC G虽然提供了多种内置的断言功能,但是在某些场景下法满足业务的需要,此时,我们就可以基于SC G自定义断言功能,以此来满足我们的业务场景。 现自定义断言这里,我们基于SC G现断言功能,现后的效果是在服务关的文件中的节点下的- : -下面进行如下配置。 :: ::- : - : ::8060 : 1 :- P=-**- N= :- SP=1通过服务关访问用户微服务时,只有在访问的链接后面添加?=参数时才能正确访问用户微服务。 (1)在关服务-中新建包,在包下新建NRPC类,主要定义一个S类型的成员变量,用来接收配置文件中的参数,源码如下所示。 ** * @* @ 100 * @ 接收配置文件中的参数 *@DNRPCS {VUID = -3289515863427972825L;S ;}(2)现自定义断言时,需要新建类继承ARPF类,在包下新建NRPF类,继承ARPF类,并覆写相关的方法,源码如下所示。 ** * @* @ 100 * @ 自定义断言功能 *@CNRPFARPFNRPC {NRPF() {(NRPC); } @OPSWE (NRPC ) {(WE)-{S= WER()QP()F(""); (SUE()){= "";} (N());}; } @OLS FO() {AL(""); }}(3)在服务关的文件中的节点下的- : -下面进行如下配置。 :: ::- : - : ::8060 : 1 :- P=-**- N= :- SP=1(4)分别启动用户微服务与关服务,在浏览器中输入::10001-1001,如下所示。 可以看到,在浏览器中输入::10001-1001,法获取到用户信息。 (5)在浏览器中输入::10001-1001?=,如下所示。 可以看到,在访问链接后添加?=参数后,能够正确获取到用户信息。 至此,我们现了自定义断言功能。 关过滤器过滤器可以在请求过程中,修改请求的参数和响应的结果等信息。在生命周期的角度总体上可以分为前置过滤器(P)和后置过滤器(P)。在现的过滤范围角度可以分为局部过滤器(GF)和全局过滤器(GF)。局部过滤器作用的范围是某一个路由,全局过滤器作用的范围是全部路由。 P前置过滤器:在请求被关路由之前调用,可以利用这种过滤器现认证、鉴权、路由等功能,也可以记录访问时间等信息。P后置过滤器:在请求被关路由到微服务之后执行。可以利用这种过滤器修改HTTP的响应H信息,修改返回的结果数据(例如对于一些敏感的数据,可以在此过滤器中统一处理后返回),收集一些统计信息等。局部过滤器(GF):也可以称为关过滤器,这种过滤器主要是作用于单一路由或者某个路由分组。全局过滤器(GF):这种过滤器主要作用于所有的路由。局部过滤器局部过滤器又称为关过滤器,这种过滤器主要是作用于单一路由或者某个路由分组。 局部过滤器概述在SC G中内置了很多不同类型的局部过滤器,主要如下所示。 演示内部过滤器演示内部过滤器时,我们为原始请求添加一个称为IP的H,值为,并添加一个称为的参数,参数值为。同时修改响应的结果状态,将结果状态修改为1001。 (1)在服务关的文件中的节点下的- : -下面进行如下配置。 :: ::- : - : ::8060 : 1 :- P=-** :- SP=1- ARH=IP,- ARP=,- SS=1001(2)在用户微服务的UC类中新增F1()方法,如下所示。 @GM( = "1") S F1(HSR , HSR ){ ("访问了F1接口"); S= H("IP"); S= P(""); (" = " ++ ",= " + );"F1";}可以看到,在新增加的F1()方法中,获取到新增加的H与参数,并将获取出来的参数与H打印出来。并且方法返回的是字符串F1。 (3)分别启动用户微服务与关服务,在浏览器中输入::10001-1,如下所示。 此时,查看浏览器中的响应状态码,如下所示。 可以看到,此时的状态码已经被修改为1001。 接下来,查看下用户微服务的控制台输出的信息,发现在输出的信息中存在如下数据。 访问了F1接口 = ,= 说明使用SC G的内置过滤器成功为原始请求添加了一个称为IP的H,值为,并添加了一个称为的参数,参数值为。同时修改了响应的结果状态,将结果状态修改为1001,符合预期效果。 自定义局部过滤器这里,我们基于SC G自定义局部过滤器现是否开启灰度发布的功能,整个现过程如下所示。 (1)在服务关的文件中的节点下的- : -下面进行如下配置。 :: ::- : - : ::8060 : 1 :- P=-** :- SP=1- G=(2)在关服务模块-中新建包,在包下新建GGFC类,用于接收配置中的参数,如下所示。 ** * @* @ 100 * @ 接收配置参数 *@DGGFCS {VUID = 983019309000445082L;;}(3)在包下GGFF类,继承AGFF类,主要是现自定义过滤器,模拟现灰度发布。代码如下所示。 ** * @* @ 100 * @ 自定义过滤器模拟现灰度发布 *@CGGFFAGFFGGFC {GGFF(){(GGFC); } @OGF (GGFC ) {(, ) - { (G()){ S("开启了灰度发布功能");}{ S("关闭了灰度发布功能");} ();}; } @OLS FO() {AL(""); }}(4)分别启动用户微服务和服务关,在浏览器中输入::10001-1001,如下所示。 可以看到,通过服务关正确访问到了用户微服务,并正确获取到了用户信息。 接下来,查看下服务关的终端,发现已经成功输出了如下信息。 开启了灰度发布功能说明正确现了自定义的局部过滤器。 全局过滤器全局过滤器是一系列特殊的过滤器,会根据条件应用到所有路由中。 全局过滤器概述在SC G中内置了多种不同的全局过滤器,如下所示。 演示全局过滤器(1)在服务关模块-模块下的包下新建GFC类,并在类中配置几个全局过滤器,如下所示。 ** * @* @ 100 * @ 关过滤器配置 *@C@S4GFC { @B @O(-1)GF F() {(, ) - {("执行前置过滤器逻辑"); ()(MR(() - { ("执行后置过滤器逻辑");}));}; }}注意:@O注解中的数字越小,执行的先级越高。 (2)启动用户微服务与服务关,在浏览器中访问::10001-1001,如下所示。 在服务关终端输出如下信息。 执行前置过滤器逻辑执行后置过滤器逻辑说明我们演示的全局过滤器生效了。 自定义全局过滤器SC G内置了很多全局过滤器,一般情况下能够满足际开发需要,但是对于某些特殊的业务场景,还是需要我们自己现自定义全局过滤器。 这里,我们就模拟现一个获取客户端访问信息,并统计访问接口时长的全局过滤器。 (1)在关服务模块-的包下,新建GGLF类,现GF接口和O接口,代码如下所示。 ** * @* @ 100 * @ 自定义全局过滤器,模拟现获取客户端信息并统计接口访问时长 *@S4@CGGLFGF, O { *** 开始访问时间* S BEGIN_VISIT_TIME = "__"; @OMV (SWE , GFC ) {先记录下访问接口的开始时间A()(BEGIN_VISIT_TIME, STM());()(MR(()-{L VT = A(BEGIN_VISIT_TIME); (VT != ){ ("访问接口主机: " + R()URI()H()); ("访问接口端口: " + R()URI()P()); ("访问接口URL: " + R()URI()P()); ("访问接口URL参数: " + R()URI()RQ()); ("访问接口时长: " + (STM() - VT) + "");}})); } @OO() {0; }}上述代码的现逻辑还是比较简单的,这里就不再赘述了。 (2)启动用户微服务与关服务,在浏览器中输入::10001-1?=,如下所示。 接下来,查看服务关的终端日志,可以发现已经输出了如下信息。 访问接口主机: 访问接口端口: 10001访问接口URL: -1访问接口URL参数: =访问接口时长: 126说明我们自定义的全局过滤器生效了。 |
狂铁是王者荣耀中一位前期极度强势的边路战士,以高额的爆发伤害
曹操是王者荣耀中一位经典的战士/打野英雄,以其强大的续航能力
想在《英雄联盟手游》中看到自己在本地玩家中的真实战力排名吗?
蒜蓉鱼片是一道非常受欢迎的家常菜,鱼肉滑嫩鲜美,蒜香浓郁扑鼻
佛跳墙土鸡煲是传统佛跳墙的简化版和改良版,以土鸡作为主角和汤