全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入理解Spring Cloud Zuul过滤器

前言

过滤器是Zuul的核心组件,这篇文章我们来详细讨论Zuul的过滤器。下面话不多说,来看看详细的介绍吧。

过滤器类型与请求生命周期

Zuul大部分功能都是通过过滤器来实现的。Zuul中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期。

(1) PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。

(2) ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

(3) POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

(4) ERROR:在其他阶段发生错误时执行该过滤器。

除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。例如,我们可以定制一种STATIC类型的过滤器,直接在Zuul中生成响应,而不将请求转发到后端的微服务。

Zuul请求的生命周期如图8-5所示,该图详细描述了各种类型的过滤器的执行顺序。

Zuul请求的生命周期

编写Zuul过滤器

理解过滤器类型和请求生命周期后,我们来编写一个Zuul过滤器。编写Zuul的过滤器非常简单,我们只需继承抽象类ZuulFilter,然后实现几个抽象方法就可以了。

那么现在,我们来编写一个简单的Zuul过滤器,让该过滤器打印请求日志。

(1) 复制项目microservice-gateway-zuul,将ArtifactId修改为microservice-gateway-zuul-filter。

(2) 编写自定义Zuul过滤器

public class PreRequestLogFilter extends ZuulFilter {
 private static final Logger LOGGER = LoggerFactory.getLogger(PreRequestLogFilter.class);
 @Override
 public String filterType() {
 return "pre";
 }
 @Override
 public int filterOrder() {
 return 1;
 }
 @Override
 public boolean shouldFilter() {
 return true;
 }
 @Override
 public Object run() {
 RequestContext ctx = RequestContext.getCurrentContext();
 HttpServletRequest request = ctx.getRequest();
 PreRequestLogFilter.LOGGER.info(String.format("send %s request to %s", request.getMethod(), request.getRequestURL().toString()));
 return null;
 }
}

由代码可知,自定义的Zuul Filter需实现以下几个方法:

  1. filterType:返回过滤器的类型。有pre、route、post、error等几种取值,分别对应上文的几种过滤器。详细可以参考com.netflix.zuul.ZuulFilter.filterType() 中的注释。
  2. filterOrder:返回一个int值来指定过滤器的执行顺序,不同的过滤器允许返回相同的数字。
  3. shouldFilter:返回一个boolean值来判断该过滤器是否要执行,true表示执行,false表示不执行。
  4. run:过滤器的具体逻辑。本例中,我们让它打印了请求的HTTP方法以及请求的地址。

(2) 修改启动类,为启动类添加以下内容:

@Bean
public PreRequestLogFilter preRequestLogFilter() {
 return new PreRequestLogFilter();
}

测试

(1) 启动microservice-discovery-eureka。

(2) 启动microservice-provider-user。

(3) 启动microservice-gateway-zuul-filter。

(4) 访问http://localhost:8040/microservice-provider-user/1 ,可获得类似如下的日志。

[nio-8040-exec-6] c.i.c.s.filters.pre.PreRequestLogFilter : send GET request to http://localhost:8040//microservice-provider-user/1

说明我们编写的自定义Zuul过滤器被执行了。

禁用Zuul过滤器

Spring Cloud默认为Zuul编写并启用了一些过滤器,例如DebugFilter、FormBodyWrapperFilter、PreDecorationFilter等。这些过滤器都存放在spring-cloud-netflix-core这个Jar包的org.springframework.cloud.netflix.zuul.filters包中。

一些场景下,我们想要禁用掉部分过滤器,此时该怎么办呢?

答案非常简单,只需设置zuul.<SimpleClassName>.<filterType>.disable=true ,即可禁用SimpleClassName所对应的过滤器。以过滤器org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter为例,只需设置zuul.SendResponseFilter.post.disable=true ,即可禁用该过滤器。

同理,如果想要禁用《编写Zuul过滤器》一节编写的过滤器,只需设置zuul.PreRequestLogFilter.pre.disable=true 即可。

TPS

(1) 相关代码com.netflix.zuul.ZuulFilter.disablePropertyName() com.netflix.zuul.ZuulFilter.isFilterDisabled()com.netflix.zuul.ZuulFilter.runFilter()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# spring  # zuul  # 过滤器  # cloud  # Spring Cloud Zuul自定义过滤器的实现  # SpringCloud Zuul过滤器和谷歌Gauva实现限流  # SpringCloud Zuul过滤器实现登陆鉴权代码实例  # Spring Cloud Zuul添加过滤器过程解析  # 详解SpringCloud Zuul过滤器返回值拦截  # 深入解析Spring Cloud内置的Zuul过滤器  # zuul过滤器中转发请求头的解决方案  # 只需  # 自定义  # 几个  # 几种  # 这篇文章  # 都是  # 发送给  # 放在  # 我们可以  # 来看看  # 为例  # 如图  # 所示  # 让它  # 四种  # 多说  # 来实现  # 统计信息  # 可利用  # 来为 


相关文章: 青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何挑选优质建站一级代理提升网站排名?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  如何通过商城免费建站系统源码自定义网站主题?  如何快速搭建高效WAP手机网站吸引移动用户?  企业微网站怎么做,公司网站和公众号有什么区别?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  家庭服务器如何搭建个人网站?  ,石家庄四十八中学官网?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  焦点电影公司作品,电影焦点结局是什么?  如何用美橙互联一键搭建多站合一网站?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何在万网自助建站平台快速创建网站?  C++时间戳转换成日期时间的步骤和示例代码  如何通过智能用户系统一键生成高效建站方案?  如何快速搭建高效WAP手机网站?  个人网站制作流程图片大全,个人网站如何注销?  如何使用Golang安装API文档生成工具_快速生成接口文档  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何用狗爹虚拟主机快速搭建网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  建站为何优先选择香港服务器?  如何在云指建站中生成FTP站点?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  网站制作壁纸教程视频,电脑壁纸网站?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  如何自定义建站之星网站的导航菜单样式?  ,怎么用自己头像做动态表情包?  如何选择最佳自助建站系统?快速指南解析优劣  如何高效完成自助建站业务培训?  C#如何在一个XML文件中查找并替换文本内容  建站之星在线客服如何快速接入解答?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  动图在线制作网站有哪些,滑动动图图集怎么做?  高端建站如何打造兼具美学与转化的品牌官网?  如何用PHP快速搭建高效网站?分步指南  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何在Golang中使用replace替换模块_指定本地或远程路径  javascript基本数据类型及类型检测常用方法小结  如何通过建站之星自助学习解决操作问题?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  ,有什么在线背英语单词效率比较高的网站?  如何在云主机上快速搭建多站点网站?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  高端网站建设与定制开发一站式解决方案 中企动力  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。