• 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
  • 相关阅读:
    uniq 只能相邻行去重
    uniq 只能相邻行去重
    uniq 只能相邻行去重
    KVO(1)
    KVO(1)
    KVO(1)
    KVO(1)
    解决 Retrofit 多 BaseUrl 及运行时动态改变 BaseUrl ?
    jquery 请求成功后
    事故现场:MySQL 中一个双引号的错位引发的血案
  • 原文地址:https://www.cnblogs.com/a-yuan/p/9588334.html
Copyright © 2020-2023  润新知