javaSpringCloud入门(5)Zuul个人文章

对于初学者入门来说,只需要知道Zuul就是当服务增多之后,就要对API进行一个统一的管理,某个类型的API就会调用某个类型的服务,除此之外还能对请求过来的API进行一个过滤。更进一步才是Zuul其它作用,具体有哪些作用如图所示:

本文重点讲解的是路由转发和过滤器。

一样的,建立一个Zuul模块,本例中没有什么消费端,所以就没有采取之前建立空父模块再建立具体子模块的方法。然后往Zuul中的pom文件中添加依赖:

org.springframework.cloudspring-cloud-starter-netflix-zuul到现在整个项目的目录结构如图所示:

因为不涉及服务消费等,只是做api的处理,所以主启动类还是比较简单的

@SpringBootApplication@EnableZuulProxy//开启Zuul@EnableEurekaClientpublicclassZuulMain9401{publicstaticvoidmain(String[]args){SpringApplication.run(ZuulMain9401.class,args);}}配置文件的话和常规的Eureka客户端是一样的

增加第一波配置文件,是在原有的配置文件上增加了以下内容。

zuul:routes:user-a:path:/api-a/**serviceId:eureka-provideuser-a是随便定义,path是外部访问的路径,serviceId是微服务配置文件的spring.application.name的值。

开启Eureka服务注册中心EurekaServer8001,服务提供者EurekaProvide7001/2/3,API网关ZuulMain9401:

@SpringBootApplication@RestController@EnableEurekaClientpublicclassEurekaProvide7001{@Value("${server.port}")intport;@GetMapping("/eureka/provide")publicStringgetInfo(){return"hello,iameurekaprovide,theprovideservice.Myport:"+port;}@GetMapping("/eureka/delayProvide")publicStringdelayGetInfo()throwsInterruptedException{Thread.sleep(3000);return"hello,delaytodosomething";}publicstaticvoidmain(String[]args){SpringApplication.run(EurekaProvide7001.class,args);}}可以看到能够成功转发路由

增加第二波配置文件

之前在学习Ribbon的时候也说过,我们可以通过Ribbon设置访问一些没有注册进Eureka的服务,同样在API网关也能通过配置文件设置Ribbon来达到一样的效果。

增加第三波配置文件

为了简单还是用同一个服务,用上面的方法修改配置文件即可,修改端口号7201,修改eureka.client.register.with.eureka=false来模拟没有注册进Eureka的服务。

接着再复制一份配置,其它都不遍,把端口号改成7202,总共是新建了端口为7201,7202的两个服务。

其它服务不用关,开启ProvideWithoutEureka7201/2服务,重启ZuulMain9401服务,此时所有的服务开启如下

顺便简单说下查看路由状态,首先还是需要增加配置文件,是一定要增加

和Hystrix,当转发路由发现服务不能够正常提供服务的时候,就可以fallback。

新建一个类MyFallbackProvider实现FallbackProvider接口

@ComponentpublicclassMyFallbackProviderimplementsFallbackProvider{@OverridepublicStringgetRoute(){//为所有的路由提供回退return"*";}@OverridepublicClientHttpResponsefallbackResponse(Stringroute,Throwablethrowable){returnnewClientHttpResponse(){@OverridepublicHttpStatusgetStatusCode()throwsIOException{returnHttpStatus.OK;}@OverridepublicintgetRawStatusCode()throwsIOException{return200;}@OverridepublicStringgetStatusText()throwsIOException{return"OK";}@Overridepublicvoidclose(){}@OverridepublicInputStreamgetBody()throwsIOException{//回退后显示出来returnnewByteArrayInputStream("somethingwrong,fallbacknow".getBytes());}@OverridepublicHttpHeadersgetHeaders(){HttpHeadersheaders=newHttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);returnheaders;}};}}现在来手动关闭ProvideWithoutEureka7201/2服务模拟服务宕机,来看看是否能回退

首先创建filter包,然后创建一个过滤器类MyPreFilter,需要实现ZuulFilter接口

publicclassMyPreFilterextendsZuulFilter{@OverridepublicStringfilterType(){//过滤器类型returnFilterConstants.PRE_TYPE;//请求前处理}@OverridepublicintfilterOrder(){//过滤器顺序,越小越优先return0;}@OverridepublicbooleanshouldFilter(){//是否开启过滤returntrue;}@OverridepublicObjectrun()throwsZuulException{//执行逻辑RequestContextcurrentContext=RequestContext.getCurrentContext();HttpServletRequestrequest=currentContext.getRequest();System.out.println("[PreFilter"+"]"+String.format("send%srequestto%s",request.getMethod(),request.getRequestURL()));returnnull;}}在FilterConstants类中定义了一系列常量,其中对于过滤器就是以下几种

publicstaticfinalStringERROR_TYPE="error";//出错时执行publicstaticfinalStringPOST_TYPE="post";//请求后请求publicstaticfinalStringPRE_TYPE="pre";//请求前请求publicstaticfinalStringROUTE_TYPE="route";//处理目标请求同时再建立一个后置请求

publicclassMyPostFilterextendsZuulFilter{@OverridepublicStringfilterType(){returnFilterConstants.POST_TYPE;}@OverridepublicintfilterOrder(){return0;}@OverridepublicbooleanshouldFilter(){returntrue;}@OverridepublicObjectrun()throwsZuulException{RequestContextcurrentContext=RequestContext.getCurrentContext();HttpServletRequestrequest=currentContext.getRequest();//这里把PreFilter改为PostFilterSystem.out.println("[PostFilter"+"]"+String.format("send%srequestto%s",request.getMethod(),request.getRequestURL()));returnnull;}}注入容器中新建一个config包,在包下创建一个类ZuulConfiguration

@ConfigurationpublicclassZuulConfiguration{@BeanpublicMyPreFiltergetZuulPreFilterBean(){returnnewMyPreFilter();}@BeanpublicMyPostFiltergetZuulPostFilterBean(){returnnewMyPostFilter();}}

THE END
1.高效过滤器主要分哪几类?高效过滤器类型:有隔板高效过滤器、无隔板高效过滤器、组合式高效过滤器、液槽式高效过滤器、抛弃式一体化/可更换式一体化高效过滤器、耐高湿高效过滤器、耐高温高效过滤器。效率级别:H10、H11、H12、H13、H14。主要是针对0.3μm以上的颗粒过滤。 参考:(www.hzyfliter.com恒之裕净化) ...http://www.gzhengzhiyu.com/html/?446.html
2.反渗透过滤器反渗透过滤器价格反渗透过滤器批发污水回用反渗透前置处理精密过滤器 品牌/型号:DLTSW/DDX-150C 过滤器类型:管式 有效过滤面积:0.4(m2) 设备重量:120(Kg) ¥3.50万元起 查看联系方式 浙江丽水 浙江滤谷水处理有限公司 河南郑州鸿谦品牌 不锈钢过滤器 反渗透过滤器 厂家直供 品牌:鸿谦 ...http://b2b.makepolo.com/cpk/cp_6qillgj1m68.html
3.BOLLFILTER是什么牌子,德国BOLLFILTER过滤器产品介绍⑤自动过滤器的外壳由球墨铸铁制成,并具有各种尺寸和公称直径。这种过滤器类型可以轻松地适应特殊的客户要求。可以根据您的要求在最短的时间内实现用于安装在发动机或模块上的特殊外壳形状。该设计允许垂直和水平操作。 三、德国BOLLFILTER双重过滤器的优点 http://www.hlo-trade.com/info/4/bollfilterbollfilter-870.html
1.过滤器—GeoServer2.24.xUserManual过滤器类型 如上所述,过滤器可以是使用cql/ecql(扩展/上下文查询语言)进行的任何有效构造。 cql是使用熟悉的基于文本的语法编写的,与SQL语句有很强的相似性。可以将cql表达式看作SQL语句的“where”子句。 以下均为标准过滤器结构: 对象比较 此筛选器将测试与属性的比较是否为真。其形式如下: ${<attribute> <...https://www.osgeo.cn/geoserver-user-manual/styling/ysld/reference/filters.html
2.过滤器的类型特点与应用过滤器液压传动精过滤器能过滤掉5~10μm颗粒 特精过滤器能滤掉1~5μm颗粒 按过滤方式分表面型过滤器过滤元件的表面与油液接触,污染粒子积聚在滤芯元件的表面,易被污染物阻塞,纳垢量较少。网式虑芯、线隙式滤芯、纸质滤芯等均属于此类型 深度型过滤器滤芯元件为有一定厚度的多孔可透性材料,内部具有曲折迂回的通道。大于表面...https://www.mechtool.cn/hydraulic/hydraulic_filter.html
3.Zuul过滤器的类型腾讯云开发者社区其中,filterType()方法返回一个字符串,表示过滤器类型。可以返回"pre"表示前置过滤器,"route"表示路由过滤器,"post"表示后置过滤器,"error"表示错误过滤器。 filterOrder()方法返回一个整数,表示过滤器执行顺序。数值越小的过滤器优先执行。 shouldFilter()方法返回一个布尔值,表示是否需要执行该过滤器。 https://cloud.tencent.com/developer/article/2260878
4.Revit过滤器怎么用?如何用Revit过滤器区分不同类型的构件?设置好排风系统及送风系统之后,将这两种过滤器类型添加到过滤器中。 添加完成后,给不同的过滤器的“填充图案”设置不同的颜色,并补充添加“新风系统、冷冻水供水系统、冷冻水回水系统、喷淋系统”过滤器,如下图所示。 设置完成后将“视觉样式”改为“着色”,视图中的风管和水管会显示为“填充图案”中设置好的颜...https://www.tuituisoft.com/bim/26488.html
5.过滤器的种类和工作原理空气滤清器位于发动机的进气系统中,是由一个或几个用于清洁空气的滤清器部件组成的组件。它的主要作用是过滤掉进入气缸的空气中的有害杂质,从而减少气缸、活塞、活塞环、气门和气门座的早期磨损。空气过滤器有两种类型,即干式和湿式。 干式空气过滤器是一种通过干式滤芯(如纸质滤芯)从空气中分离杂质的过滤器。轻型车...https://www.yoojia.com/article/9623612845055280247.html
6.袋式过滤器有哪些类型?袋式过滤器的类型有:单袋式过滤器、多袋式过滤器、塑料袋式过滤器、顶入式袋式过滤器、侧入式袋式过滤器、双袋式过滤器、移动式袋式过滤器、保温夹套式过滤器等。 单袋式过滤器: 概述:单袋式过滤器是一种新型过滤系统,规格有WF-1P2S、WF-1P1S、WF-1P4S、WF-1P3S、WF-1P5S和WF-1P6S。 https://www.xzcgl.cn/daishiguolvqixinwen/210.html
7.过滤器过滤器由筒体、不锈钢滤网、排污部分、传动装置及电气控制部分组成。过滤器工作时,待过滤的水由水口时入,流经滤网,通过出口进入用户所须的管道进行工艺循环,水中的颗粒杂技被截留在滤网内部。如此不断的循环,被截留下来的颗粒越来越多,过滤速度越来越慢,而进口的污水https://vibaike.com/3967/
8.wireshark捕获过滤器语法使用解析相关技巧Wireshark可以基于类型进行捕获过滤。其中可能使用的类型有主机host,网段net,端口port,端口范围portrange和特殊类型。 主机host 语法格式: host host 解析:第一个host表示过滤器类型为host:第二个host表示主机地址,可以是ipv4或Ipv6地址。 例:捕获主机192.168.1.10 的数据包。 host 192.168.1.10 网段net net用来指定捕...https://www.jb51.net/article/243347.htm
9.如何在WooCommerce中按类别过滤产品?Bluehost中文官方博客现在,你可以配置你的过滤器组的第一个元素。 给过滤器取个好听的名字,然后用下拉框选择它要过滤的内容,例如,类别、价格、颜色等。接下来,选择你需要的过滤器类型(下拉、复选框、单选按钮等)–请注意,这里的选项可能会因你选择的 “过滤对象 “而有所不同。 https://cn.bluehost.com/blog/e-commerce/16923.html
10.ZLLD立式角通电动刷式过滤器水过滤刷式过滤器类型 管式 zlld立式角通电动刷式过滤器是在zlls立式角通手摇刷式过滤器的设计上配上智能控制相关设备,从而实现过滤器在线清洗、排污、过滤的全自动控制,保障管路持续正常运转。 长沙中健暖通空调设备有限公司原名长沙精诚暖通空调设备厂,座落在古城长沙繁华的书院南路中段,是一家专门从事给排水、暖通空调、自动...https://product.11467.com/info/925070.htm
11.Wreshark通过协议过滤wireshark过滤协议类型抓包过滤器类型Type(host、net、port)、方向Dir(src、dst)、协议Proto(ether、ip、tcp、udp、http、icmp、ftp等)、逻辑运算符(&& 与、|| 或、!非) (1)协议过滤 比较简单,直接在抓包过滤框中直接输入协议名即可。 TCP,只显示TCP协议的数据包列表 https://blog.51cto.com/u_16213565/10624808
12.细胞过滤器细胞过滤器,通常指的是细胞膜上的通道蛋白或孔蛋白,它们在细胞膜中形成孔洞,允许特定大小和类型的分子通过,同时阻止其他分子。它们在细胞内外物质交换、信号传导、维持细胞内环境稳定等方面发挥关键作用。主要用于细胞培养、生物制药、生物技术研究等领域的细胞处理过程中,以确保细胞的纯度、质量和实验结果的准确性。 https://www.qxw18.com/z/5482/