首页 教育

武林外传—武三通的zuul之惑

时间:2018-10-22 09:53:36 栏目:教育

渔樵耕读四人紧赶慢赶地开始了网关的设计和开发,他们倒也算劳逸结合,中间休息了,或到山涧里徒手抓鱼,或放开喉咙唱着歌,或摇头晃脑地吟几首诗,一日晚间,武三通躺在牛背上,看着天上的云层发呆。

“师弟,天上没月亮,也没嫦娥,发什么呆呀?” 朱子柳走过来道。

“师兄,最近不是在开发网关吗,有几处想不明白,正要请教呢?”

“你说。“朱子柳笑道。

”我看zuul的相关文档,还有那张图和表。” 武三通指着图示的位置。

武林外传—武三通的zuul之惑

spring cloud zuul核心过滤器:

类型顺序过滤器功能pre-3ServletDetectionFilter主要用来检测当前请求是通过Spring的DispatcherServlet处理运行,还是通过ZuulServlet来处理运行的pre-2Servlet30WrapperFilter主要为了将原始的HttpServletRequest包装成Servlet30RequestWrapper对象pre-1FormBodyWrapperFilter将符合要求的请求体包装成FormBodyRequestWrapper对象pre1DebugFilter标记调试标志,根据配置参数zuul.debug.request和请求中的debug参数来决定是否执行过滤器中的操作pre5PreDecorationFilter处理请求上下文供后续使用route10RibbonRoutingFilterserviceId请求转发route100SimpleHostRoutingFilterurl请求转发route500SendForwardFilterforward请求转发post0SendErrorFilter处理有错误的请求响应post500SendForwardFilter处理forwardpost1000SendResponseFilter处理正常的请求响应

武三通接着道:“我们开发主要做的不就是继承ZuulFilter,然后实现相关方法吗?这个ZuulFilter与servlet filter的好类似呀,这两者有什么区别吗?”

朱子柳嘿嘿笑道:“你是刚接触不久,时间长了,不久会知道,这两者还是大不一样的,zull filter当然可以用java写,有时候为了动态修改filter,zuul利用了groovy,它是一门基于jvm的语言,语法简单且和java很类似,,它是可以动态加载的,应用发布到线上后可以在不重启情况下对业务逻辑进行修改。你看示例代码。”

  • public class ExampleSurgicalDebugFilter extends ZuulFilter {

  •     @Override

  •    String filterType() {

  •        return "pre"

  •    }

  •     @Override

  •    int filterOrder() {

  •        return 96

  •    }

  •     @Override

  •    boolean shouldFilter() {

  •        RequestContext.currentContext.getRequest().getRequestURI().matches("/api/test.*")

  •    }

  •     @Override

  •    Object run() {

  •         RequestContext.currentContext.routeHost = new URL("http://example.com");

  •        if (HTTPRequestUtils.getInstance().getQueryParams() == null) {

  •            RequestContext.getCurrentContext().setRequestQueryParams(new HashMap<String, List<String>>());

  •        }

  •        HTTPRequestUtils.getInstance().getQueryParams().put("debugRequest", ["true"])

  •        RequestContext.currentContext.setDebugRequest(true)

  •        RequestContext.getCurrentContext().zuulToZuul = true

  • 相关文章