13 Zuul的配置

  在前面的博文中,我们介绍了Zuul在Web以及微服务集群中的应用,在本文中,我们将介绍Zuul的相关配置。

1.路由配置

  1.1 简单路由

  Spring Cloud在Zuul的routing阶段实现了几个过滤器,这些过滤器决定如何进行路由的工作。其中,最基本的就是SimpleHostRoutingFilter,该过滤器运行后,会将HTTP请求全部转发到“源服务”(HTTP服务),我们将其称之为简单路由。例如,一下就是简单路由的配置,它同时使用了path和url:

zuul:
    routes:
        routeTest:
            path: /routeTest/163
            url: http://www.163.com

  以上的配置访问http://localhost:8080/routeTest/163,见识跳转到163网站。为了配置简便,可以省略path,默认情况下使用routeId作为path,以下的配置省略了path配置:

zuul:
    routes:
        route163:
            url: http://www.163.com

  访问http://localhost:8080/route163,同样会路由到163网站。实际上,要触发简单路由,配置url的值需要以http:或者https:字符串开头。

  简单路由过滤器SimpleHostRoutingFilter使用HttpClient进行转发,该过滤器会将HttpServletRequest的相关数据(HTTP方法,参数,请求头等)转换为HttpClient的请求实例(HttpRequest),再使用CloseableHttpClient进行转发。在此过程中,为了保证转发的性能,使用了HttpClient的连接池功能。涉及到连接池,就需要对其进行配置,在使用简单配置时,可以使用一下两项,修改HttpClient连接池的属性。

  》 zuul.host.maxTotalConnections: 目标主机的最大连接数,默认值为200。配置这一项,相当于调用了PoolingHttpClientConnectionManager的setMaxTotal方法。

  》 zuul.host.maxPerRouteConnections: 每个主机的初始连接数,默认值为20。配置该项,相当于调用了PoolingHttpClientConnectionManager的setDefaultMaxPerRoute方法。

  1.2 跳转路由

  除了简单路由外,也支持跳转路由。当外部访问网关的A地址时,会跳转到B地址,处理跳转路由的过滤器为SendForwardFilter。跳转路由的配置代码如下

zuul:
    routes:
        helloRoute:
            path: /test/**
            url: forward:/source/hello

  当外部访问/test地址时,会自动跳转到/source/hello地址。

  1.3 Ribbon路由

  当网关作为Eureka客户端注册到Eureka服务器是,可以通过配置serviceId将请求转发到集群的服务中。使用以下配置,可以执行Ribbon路由过滤器:

zuul:
    routes:
        sale:
            path: /sale/**
            serviceId: saleservice

  与简单路由类似,serviceId也可以被省略。当省略时,将会使用routeId作为serviceId,代码如下,效果等同于上面的配置

zuul:
    routes:
        saleservice
            path: /sale/**          

  需要注意的是,如果提供的url配置项不是简单路由格式(不以http:或https开头),也不是以跳转路由格式(foward:开头),那么将会执行Ribbon路由的过滤器,将url看作一个serviceId。配置片段如下,效果与前面的两个相同

zuul:
    routes:
        sale:
            path: /sale/**
            url: saleservice

  1.4 忽略路由

  以上的路由规则,如果想让一个或多个服务不被路由,可以使用zuul.ignoredServices属性。例如,若想排除saleservice和bookservice这两个模块,可以这么配置zuul.ignoredServices:saleservice,bookservice。此外,还可以使用zuul.ignoredPatterns来设置不进行路由的url,配置片段如下

zuul:
    ignoredPatterns: /sale/noRoute
    routes:
        sales:
            path: /sale/**
            serviceId: saleservice

2. Zuul的其他配置

   请求头配置

    在集群的服务间共享请求头并没有什么问题,但是如果请求会被转发到其他系统,那么对于敏感的请求头信息,就需要进行处理。在默认情况下,HTTP请求的Cookie、Set-Cookie、Authorization属性不会传递到“源服务”,可以用sensitiveHeaders属性来配置敏感请求头,下面的配置对全局生效:

zuul:
    sensitiveHeaders: accept-language,cookie

    以下的片段,仅对一个路由生效:

zuul:
    routes:
        sale:
            path: /sale/**
            serviceId: saleservice
            sensitiveHerders: cookie

    除了使用sensitiveHeader属性外,还可以使用ignoredHeaders属性来配置全局忽略的请求头。使用该配置项后,请求与响应中所配置的头信息均被忽略:

zuul:
    ignoredHeaders: accept-language
原文地址:https://www.cnblogs.com/a-yuan/p/9588334.html