Spring Cloud内置的Zuul过滤器详解
2017-04-12 14:43:01我是51CTO学院讲师周立,在51CTO学院“4.20 IT充电节”(4月19~20日)到来之际,和大家分享一下《Spring Cloud内置的Zuul过滤器应用》的经验。
我是51CTO学院讲师周立,在51CTO学院“4.20 IT充电节”(4月19~20日)到来之际,和大家分享一下《Spring Cloud内置的Zuul过滤器应用》的经验。正文来啦~~~
Spring Cloud默认为Zuul编写并启用了一些过滤器,这些过滤器有什么作用呢?我们不妨按照@EnableZuulServer、@EnableZuulProxy两个注解进行展开,相信大家对这两个注解都不陌生(至少都见过吧)。如果觉得陌生也没有关系,可将@EnableZuulProxy简单理解为@EnableZuulServer的增强版。事实上,当Zuul与Eureka、Ribbon等组件配合使用时,@EnableZuulProxy是我们常用的注解。
在Spring Cloud的官方文档中,只说@EnableZuulServer是一个“空白”的Zuul,那么究竟空白在什么地方呢?与@EnableZuulProxy到底有什么区别呢?诸多问题,都将在本文找到答案。
在此之前,我们先理解什么是Requestcontext:
RequestContext:用于在过滤器之间传递消息。它的数据保存在每个请求的ThreadLocal中。它用于存储请求路由到哪里、错误、HttpServletRequest、HttpServletResponse都存储在RequestContext中。RequestContext扩展了ConcurrentHashMap,所以,任何数据都可以存储在上下文中。
@EnableZuulServer过滤器
一、pre类型过滤器
(1) ServletDetectionFilter:该过滤器用于检查请求是否通过Spring Dispatcher。检查后,通过isDispatcherServletRequest设置布尔值。
(2) FormBodyWrapperFilter:解析表单数据,并为请求重新编码。
(3) DebugFilter:顾名思义,调试用的过滤器,可以通过zuul.debug.request=true,或在请求时,加上debug=true的参数,例如$ZUUL_HOST:ZUUL_PORT/path?debug=true开启该过滤器。这样,该过滤器就会把RequestContext.setDebugRouting()、RequestContext.setDebugRequest()设为true。
二、route类型过滤器
SendForwardFilter:该过滤器使用Servlet RequestDispatcher转发请求,转发位置存储在RequestContext.getCurrentContext().get(“forward.to”)中。可以将路由设置成:
然后访问$ZUUL_HOST:ZUUL_PORT/abc,观察该过滤器的执行过程。
三、post类型过滤器
SendResponseFilter:将Zuul所代理的微服务的响应写入当前响应。
四、error类型过滤器
SendErrorFilter:如果RequestContext.getThrowable()不为null,那么默认就会转发到/error,也可以设置error.path属性修改默认的转发路径。
@EnableZuulProxy过滤器
如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会安装以下过滤器:
一、pre类型过滤器
PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。
二、route类型过滤器
(1) RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get(“serviceId”)中。该过滤器可使用不同的HTTP客户端,例如

Apache HttpClient:默认的HTTP客户端
SquareupOkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true。
Netflix Ribbon HTTP client:设置ribbon.restclient.enabled = true即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。
(2) SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost()中。
51CTO学院 4.20 IT充电节
(19-20号两天,100门视频课程免单抢,更有视频课程会员享6折,非会员享7折,套餐折上8折,微职位立减2000元钜惠)
活动链接:
相关视频教程:
Spring Cloud微服务实战
起亚k3换气油滤芯漏气,要换汽油泵吗
需要进行检查汽油滤芯安装到位没有,汽油滤品质不良原因比较常见
万能打印机常见故障和维修方法?
万能打印机常见问题及维修排除方法详解:1.万能打印机意外停止打印在打印过程中,打印头正在清洗打印头、充墨、或等待干墨检查是否暂停指示灯闪烁。 如果是,打印机正在清洗打印头,充墨或等待干墨。 在清洗打印头、充墨和等待干墨的过程中,液晶显示屏显示2.万能打印机PLEASE WAIT(请等待),直到打印机恢复打印。 发生错误通过液晶显示屏上的信息,可以识别多种常见的打印机问题。 您可以通过控制面板指示灯检查错误。 请参见指示灯。 3.A万能打印机对于下表不包括的其他信息,参见信息。 错误信息墨盒 INK CRTG(墨盒无效)安装的墨盒产品编号错误。 取出墨盒,然后安装正确产品编号的墨盒。 请参见耗材。 INK CRTG(墨盒错误)安装的墨盒不能用于该A2 4880c 万能打印机。 取下墨盒,并安装可以用于此打印机的墨盒。 请参见耗材。 INK CRTG(设置墨盒)发生CSIC错误。 取下墨盒并重新安装。 如果在重新安装墨盒之后出现此信息,再重新安装它。 请参见更换墨盒。 INK CRTG (无墨盒)没有安装墨盒,或墨舱杠杆锁处于解锁位置。 安装墨盒,或放下墨舱杠杆锁到锁定位置。 TNK FULL(维护箱满)维护箱已满。 更换一个新的维护箱。 请参见更换维护箱。
最疯狂的洁具发明有哪些?
无论是科学家,还是老百姓,都希望找到一种可以让打扫卫生变得轻松愉快的方法。 当然,有些探索令人拍案叫绝,有些令人抓狂。 以下是10种最疯狂的清洁用具新发明,其中包括蟑螂、苍蝇拍拖鞋、USB接口真空吸尘器等东西。
1.蟑螂拍拖鞋
不用靠的太近就能轻松杀死蟑螂的最有效方法。
2.婴儿拖把
有了婴儿拖把,小孩子还没学会走就可以帮你做家务了。 小孩出生以后经常会有人说:“是的,小家伙确实挺可爱,但是他们能做什么呢?”我们最常听到的回答是:“躺在那里哭闹呗!”但现在婴儿也可以“工作”了,即使刚出生不久的小宝宝,也可以利用这种特制拖把,帮母亲做家务。 你只要给其穿上婴儿拖把,把他们放在需要打扫的木质地板上,就能在玩乐中打扫干净地面。
3.带摄像头的洁耳器
利用带摄像头的洁耳器,现在你在洁耳时就可以看到耳朵里的所有污垢了。
接口真空吸尘器
看到键盘里堆积了很多灰尘和面包屑,又不知道如何清除,你该怎么办?现在有人研制出这种微型超轻真空吸尘器,利用它可以轻松清除掉键盘里的脏物。 USB接口真空吸尘器的外形跟普通的吸尘器差不多,但可以把它插在笔记本电脑上充电。 它带一根长45英寸(1.14米)的线,因此可以用它清洁桌子的各个角落。
5.人体清洗机
如果机器能洗衣服,为什么不能给人洗身体呢?当然可以!事实上,三洋公司在大约40年前就验证了这一概念。 这种所谓的超声波清洗器可自动清洗身体。 用户利用梯子爬上机器,从顶部的开口处进入清洗机内。 设定温度后,清洗过程开始。 超声波清洗器会先把温水喷洒在用户身上,这一过程持续5分钟。 然后它会充满热水,为用户提供3分钟的按摩浴。 最后,超声波发生器生成的气泡将把皮肤上的灰尘带走。 等待一分钟后,该机器会自动将你烘干。
6.自洁简易床
人类的懒惰心理(或称追求便利的心理)已经提升到一个新水平。 事实上这种床能够自己整理自己。 从一张凌乱的床变成一张看起来像是洁癖使用的床,这种新发明显然使床的自动化水平达到一个新高度。
7.浴室清洁机器人 俄罗斯研制的浴室清洁机器人是自动清洁和整理浴室的一个新帮手。 它的完美性能一定会令你大吃一惊。 把这种装置接通水龙头后,它就开始利用抹布擦拭房间。 无论是淋浴间、浴缸、水槽、地板,还是墙面,这种可爱的机器人会把它们擦拭得干干净净。 更令人意想不到的是,它借助底部的吸盘能爬上墙面,把高处也擦拭干净。
8.真空球 这种吸尘球(Dust Ball)的设计目的是让它在内置发动机的推动下,在地面上滚动,清洁垃圾。 这个内置发动机会改变吸尘球的重心,使它移动。 电池耗完电时,吸尘球会滚回它的充电环,一个特殊装置会让它停下来,开始发光。 这听起来确实很不错,不过其他自动清洁器很小,而且呈蹲伏状,能钻到家具下面清除犄角旮旯的灰尘。 这种吸尘球的大个头意味着它无法清洁离墙面较近的区域。
9.清洁鞋 很多人都讨厌做家务,对这些人来说,任何能使家务变得更轻松的东西都是好的。 印度尼西亚工业设计师阿迪卡-提图特-特里雨果设计的这些鞋子有微型内置拖地机,你只要穿上它们到处走一走,鞋上的小刷子就会把遇到的垃圾扫干净。 内置充电电池为刷子供电,通过鞋侧的发光二极管可以知道电量还剩多少。
10.果蔬清洁机 如果你讨厌在做饭前清洗蔬菜和水果,果蔬清洁机能让你的生活变得更轻松一些。 这个玩意儿看上去就像一些古怪的高保真唱机转盘。 虽然它也发出声音,但事实上它与唱片没有丝毫联系。 Coway SWV-08AM是最新清洗器,它使你更容易地清除掉生食上的脏东西和化学物质。 它利用声波清除肉、水果、食品、餐具、锅、壶和刀叉上的污物,不用使用一点清洁剂。
这种装置的工作原理非常简单:强大的声波引起微型空化(气蚀)效应,使污物脱离物体表面。 这个装置结合了控制器和龙头,SWV-08AM就像一个传统水龙头,很小,也很好用,安装起来也很容易。 水从喷头里喷出,用来冲洗污物,防止二手污染。
另外,它还有一个P-Sediment过滤器,用来过滤水中的杂物。 P-Sediment过滤器表面有很多折痕,这增大了过滤区域,有效提高了过滤水中微粒的能力。 它有两个按钮,一个上面写有“强”字,一个上面写有“柔”字。 通过这两个按钮,你可以在清洗不同物品时选择合适的水压。
发表评论