SpringCloud 之 Zuul(六)

简介:

     是Netflix的一个子项目

     提供代理,过滤,路由等功能

1、引入依赖

        <dependency>
            <!--zuul 网关依赖-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>

2、配置文件配置转发规则

server:
  port:9000
zuul:
  routes:
    source: #source只是一个路由的名称,可以任意改变名称
    #配置的时候省略path,source就充当path
       url: http://localhost:8080

3、启动

@SpringBootApplication
@EnableZuulProxy //开启zuul网关代理
public class ApiGateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(ApiGateWayApplication.class, args);
    }
}

4、访问localhost:9000/source/hello/ 接口,路由会将它转发到8080的服务去执行。

zuul配置所有的请求转发

server:
  port:9000
zuul:
  routes:
    sale: #sale只是一个路由的名称,可以任意改变名称
       path: /sale/**  #外部请求所有的source路径都会转发到下面的serviceId进行处理进行处理
       serviceId: sale-service

简单路由(HostRoutingFilter):

扫描二维码关注公众号,回复: 10842436 查看本文章
zuul:
  routes:
    routeTest:
       path:/routeTest/163
       url:http://www.163.com   #简单路由是url,格式是以http或者https开头的

    配置http连接池:

zuul:
  host:
#目标主机的最大连接数,默认值是200,配置该项,相当于调用
#PoolingHttpClientConnectionManager 的setMaxTotal方法
    max-total-connections: 200  
#每个主机的初始连接数,默认值是20,配置该项,相当于调用
@PoolingHttpClientConnectionManager的setDefaultMaxPerRoute方法。
    max-per-route-connections: 20

跳转路由(SendForwardFilter):使用forward:

server:
  port:9000
zuul:
  routes:
    testForward: 
       path: /fo/**  #外部请求所有的fo路径都会转发到下面的serviceId进行处理进行处理
        # /receive是服务内的一个地址
        #跳转路由以forward:开头 
       url: forward: /receive   

Ribbon路由:  serviceId

zuul:
  routes: 
    sale:   #routerid,随便起名字
      path: /sale/**
      serviceId: zuul-sale-service

================分割线,上线两种方式效果一下====================

zuul:
  routes: 
    zuul-sale-service:   #如果不提供serviceId,默认将routerId作为serviceId
      path: /sale/**


================分割线====================
zuul:
  routes: 
    sale:   #routerid,随便起名字
      path: /sale/**
      #如果url的格式既不是简单路由格式,也不是跳转路由格式,那么它会被当成serviceId进行处理
      url: zuul-sale-service  

自定义路由规则(PatternServiceRouteMappper)

@Configuration
public class MyConfig{
    
//访问网关的/XXXXXX/**,将被转发的zuul-xxxxx-service服务进行处理
    @Bean
    public PatternServiceRouteMapper patternServiceRouteMapper(){ 
      //  return new PatternServiceRouteMapper(
      //     "(zuul)-(?<module>.+)-(serivce)","${module}/**");

        //sale的任何请求都会被spring-zuul-sale-service的服务id处理。
        //<module>是后面的sale值
          return new PatternServiceRouteMapper(
            "(spring)-(zuul)-(?<module>.+)-(serivce)","${sale}/**");
    }
}

排除一个服务或者多个服务不被路由到,可以使用:

zuul:
  ignoredPatterns: /sale/noRoute   #忽略/sale/noRoute路径,不会被路由到
  ignoreServices: zuul-sale-service,zuul-order-service #忽略这些服务
#(全局配置)sensitiveHeaders会过滤客户端附带的headers
#也可以通过在router内进行配置
  sensitiveHeaders: accept-language,cookie
#会过滤服务之间通信附带的headers
  ignoreHeaders: accept-language,cookie


 
============局部配置=====
zuul:
  routes:
    users:
      path: /myusers/**
      sensitiveHeaders: Cookie,Set-Cookie,Authorization
      url: https://downstream

sensitiveHeaders会过滤客户端附带的headers

敏感headers支持全局设置 zuul.sensitiveHeaders. 如果在单个路由中设置 sensitiveHeaders 会覆盖全局 sensitiveHeaders 设置.
例如:
sensitiveHeaders: X-ABC
如果客户端在发请求是带了X-ABC,那么X-ABC不会传递给下游服务

ignoredHeaders会过滤服务之间通信附带的headers
例如:
ignoredHeaders: X-ABC
如果客户端在发请求是带了X-ABC,那么X-ABC依然会传递给下游服务。但是如果下游服务再转发就会被过滤

还有一种情况就是客户端带了X-ABC,在ZUUL的Filter中又addZuulRequestHeader("X-ABC", "new"),
那么客户端的X-ABC将会被覆盖,此时不需要sensitiveHeaders。如果设置了sensitiveHeaders: X-ABC,那么Filter中设置的X-ABC依然不会被过滤。

路由端点

加人Actuator依赖,并且将安全认证managementsecurity设置为false关闭

    配置中配置:  management.security.enabled =false;

然后访问zuul的地址+/routes                    localhost:9000/routes 查看监测的端点

功能进阶

过滤器优先级

routing过滤器负责路由

@EnableZuulServer和@EnableZuulProxy区别

@EnableZuulServer(不具备简单路由和Ribbon路由的能力):不支持图中灰色的过滤器,如下:


 

发布了45 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/m0_37668842/article/details/94867516