zuul常用配置

主机相关配置

配置项说明默认值
zuul.host.connect-timeout-millis连接主机的超时时间,默认单位ms2000
zuul.host.max-per-route-connections每个路由的连接数20
zuul.host.max-total-connections总连接数200
zuul.host.connection-request-timeout-millis连接请求的超时时间-1
zuul.host.socket-timeout-millis配置请求套接字的超时时间,默认单位ms10000
zuul.host.time-to-live生存时间-1
zuul.host.time-unit配置默认的时间单位,默认为msMILLISECONDS

Header相关配置

配置项说明默认值
zuul.ignore-security-headers是否丢弃安全的(敏感的)Headertrue
zuul.ignored-headers忽略的头部信息,忽略的header不会传播到下游的服务
zuul.add-host-headerAPI网关在进行请求路由转发之前为请求设置Host头信息false
zuul.add-proxy-headers是否将X-Forwarded-Host添加到请求转发的请求中true
zuul.include-debug-header是否包含调试相关的headerfalse
zuul.include-debug-header是否包含调试相关的headerfalse
zuul.sensitive-headers设置敏感的头部信息,默认情况下,敏感的头信息无法经过API网关进行传递Cookie,Set-Cookie, Authorization
zuul.set-content-length是否设置Content-length header,表示文本的字节长度

Ribbon相关配置

配置项说明默认值
zuul.ribbon-isolation-strategyribbon的隔离策略,SEMAPHORE和THREADsemaphore
zuul.semaphore.max-semaphores配置最大信号量100
zuul.thread-pool.thread-pool-key-prefix设置线程池key的前缀ff
zuul.thread-pool.use-separate-thread-pools是否开启线程池隔离机制false
zuul.trace-request-body是否开启请求链路追踪false
zuul.ribbon.eager-load.enabled是否开启ribbon的eager-load(饿模式)false
zuul.retryable是否开启重试机制,重试机制由Hystrix提供false
zuul.routes.feign-consumer.retryable是否开启某一个服务的重试机制false
zuul.initial-stream-buffer-size设置初始缓冲值大小8192

路由规则

配置项说明默认值
zuul.routes路由配置规则,详见说明1
zuul.ignore-local-service是否忽略本地的服务true
zuul.ignored-services配置忽略的服务,指定的服务不创建路由规则
zuul.ignored-patterns匹配该表达式的接口路径不创建路由规则
zuul.strip-prefix是否将代理的前缀进行剥离,详见说明2true
zuul.prefix为所有路由规则增加前缀
zuul.servlet-path设置servlet路径,详见说明3/zuul
zuul.ssl-hostname-validation-enabled是否开启ssl hostname校验true
zuul.decode-url在处理传入请求时,请求 URI 在将它们与路由匹配之前被解码true
zuul.force-original-query-string-encoding用于设置是否强制将查询字符串编码false
zuul.remove-semicolon-content表示是否可以删除第一个分号之后的路径元素的标志true

说明1

zuul.routes

该配置是请求路由配置的核心参数

  1. 传统路由方式:

传统的路由方式 zuul.routes.api-a.path: /api-a/** zuul.routes.api-a.url: http://localhost:8083/

假如:api网关对外提供的服务端口为8000 访问:http://localhost:8000/api-a/test api网关自动路由到:http://localhost:8083/test

  1. 面向服务的路由方式

    前提需要引入注册中心

    zuul.routes.api-a.path: /api-a/** zuul.routes.api-a.serviceId: serviceA

    假如:api网关对外提供的服务端口为8000 访问:http://localhost:8000/api-a/test api网关自动路由到:eureka服务名称为serviceA服务的某一个实例的/test接口,如果该服务有多个实例,api网关会自动提供负载均衡

如果不提供以上配置,Zuul默认实现了服务实例的自动化维护 访问 http://localhost:8000/serviceA/test api网关自动路由到对应的服务名为serviceA的某个示例上的/test接口

Zuul中的路由匹配规则使用了Ant风格定义,一共有三种不同的通配符:

  • ?: 可以匹配单个字符,比如路径是/api/?,就可以匹配到/api/a,/api/b

  • *: 匹配任意数量的字符,比如路径是/api/*,就能匹配到/api/aa,/api/bb等,但是只能匹配一级,像/api/aa/bb这样的路径就匹配不到了

  • **: 匹配任意数量的字符,比如路径是/api/**,就能匹配到/api/aa,/api/aa/b

说明2

zuul.strip-prefix 配置是否将请求前缀进行剥离

zuul.strip-prefix为true,会请请求的前缀进行剥离,将请求前缀当成服务名称。

如:请求 /test/v1/hello,请求转发到test服务的/v1/hello接口

如果strip-prefix为false,则请求转发到配置的服务的/test/v1/hello接口

说明3

zuul.servlet-path

Zuul 是作为一个 Servlet 实现的。对于一般情况,Zuul 被嵌入到 Spring Dispatch 机制中。这让 Spring MVC 可以控制路由。在这种情况下,Zuul 会缓冲请求。如果需要在不缓冲请求的情况下通过 Zuul(例如,对于大文件上传),则 Servlet 也安装在 Spring Dispatcher 之外。

zuul的隔离机制:

zuul有两种隔离机制 线程池隔离和信号量隔离

(1) 信号量隔离,默认值为100,也就是当请求大于100,就会返回500错误

(2) 使用线程池隔离

参考:https://cloud.spring.io/spring-cloud-netflix/multi/multi__router_and_filter_zuul.html

更多推荐

API网关Zuul配置详解(这一篇就够了)