zuul常用配置
主机相关配置
配置项 | 说明 | 默认值 |
---|---|---|
zuul.host.connect-timeout-millis | 连接主机的超时时间,默认单位ms | 2000 |
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 | 配置请求套接字的超时时间,默认单位ms | 10000 |
zuul.host.time-to-live | 生存时间 | -1 |
zuul.host.time-unit | 配置默认的时间单位,默认为ms | MILLISECONDS |
Header相关配置
配置项 | 说明 | 默认值 |
---|---|---|
zuul.ignore-security-headers | 是否丢弃安全的(敏感的)Header | true |
zuul.ignored-headers | 忽略的头部信息,忽略的header不会传播到下游的服务 | |
zuul.add-host-header | API网关在进行请求路由转发之前为请求设置Host头信息 | false |
zuul.add-proxy-headers | 是否将X-Forwarded-Host添加到请求转发的请求中 | true |
zuul.include-debug-header | 是否包含调试相关的header | false |
zuul.include-debug-header | 是否包含调试相关的header | false |
zuul.sensitive-headers | 设置敏感的头部信息,默认情况下,敏感的头信息无法经过API网关进行传递 | Cookie,Set-Cookie, Authorization |
zuul.set-content-length | 是否设置Content-length header,表示文本的字节长度 | |
Ribbon相关配置
配置项 | 说明 | 默认值 |
---|---|---|
zuul.ribbon-isolation-strategy | ribbon的隔离策略,SEMAPHORE和THREAD | semaphore |
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 | 是否将代理的前缀进行剥离,详见说明2 | true |
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
该配置是请求路由配置的核心参数
-
传统路由方式:
传统的路由方式 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
-
面向服务的路由方式
前提需要引入注册中心
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配置详解(这一篇就够了)
发布评论