a、单例serverId映射cookie
zuul: routes: client-a: path: /client/** serviceId: client-a
意思是,以/client/**为端点路径的服务都映射到client-a,这种配置还能够简写成下面的格式,两者效果彻底一致:app
官网 www.1b23.com zuul: routes: client-a: /client/**
还有一种更粗暴的方式,就是映射的serverId都不用写,以下:负载均衡
zuul: routes: client-a:
这种配置,zuul会为client-a添加一个默认的映射规则,即:/client/**,至关于上面的第一种配置方式。dom
b、单例URL映射编码
这种配置意思就是,网关路由到具体的服务地址,即:将serverId替换成url,以下:url
zuul: routes: client-a: path: /client/** url: http://localhost:7070 #client-a的地址
c、多实例路由spa
默认状况下zuul会使用eureka中集成的负载均衡功能,若是要使用ribbon的负载均衡,就须要指定serverId,这个操做必定要禁用掉ribbon使用eureka,具体操做以下:.net
zuul: routes: ribbon-route: path: /ribbon/** serviceId: ribbon-route ribbon: eureka: enabled: false #禁止Ribbon使用Eureka ribbon-route: ribbon: NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList #定义获取服务列表方法 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #Ribbon LB Strategy 使用随机负载策略 listOfServers: localhost:7070,localhost:7071 #client services for Ribbon LB 指定服务地址
d、forword本地跳转server
假如在网关服务中,须要作一些逻辑处理,能够在配置url时,添加forword选项:接口
zuul: routes: client-a: path: /client/** url: forward:/client #跳转到网关服务中@GetMapping("/client")端点
e、相同路径加载
zuul: routes: client-b: path: /client/** serviceId: client-b client-a: path: /client/** serviceId: client-a
从上面的配置文件,能够看出,配置了两个工程的路由,即:client-a工程,client-b工程,可是两者的path路径是一致的,这种状况下,在加载访问的时候,后者会覆盖前者。
f、路由通配符
规则 | 说明 | 示例 |
/** | 匹配任意数量的路径与字符 | /client/add, /client/update, client/a, client/add/a, client/update/a/b |
/* | 匹配任意数的字符 | /client/add, /client/update, client/a |
/? | 匹配单个字符 | /client/a |
a、屏蔽服务、屏蔽路径
zuul: ignored-services: client-b #忽略的服务,防止服务侵入 ignored-patterns: /**/div/** #忽略的接口,屏蔽接口 routes: client-a: /client/**
加上 ignored-services 与 ignored-patterns 以后,zuul在拉取服务列表的时候,建立映射规则的时候,就会忽略掉client-b服务和/**/div/**接口。
b、过滤掉敏感请求头
正常咱们使用HTTP请求服务,在header添加值进行传递,是很正常的一件事,协议的一些基本认证也都在header,好比cookie,或者把登陆认证经过后的用户信息base64编码后,放在authorization里面,在系统内这种传递是没有问题的,可是若是系统与外部进行交互,这种可能就会出现异常,毕竟也要防患于未然,这时能够在zuul里边指定敏感头信息,切断它与下游的交互,以下:
zuul: routes: client-a: path: /client/** sensitiveHeaders: Cookie,Set-Cookie,Authorization serviceId: client-a
c、重定向
在实际企业级项目中,不少操做都是须要用户登陆后,才能够进行操做的,为了防止用户登陆成功后,在重定向的时候,将对应的服务地址暴露给用户,能够设置一个头,以下:
zuul: add-host-header: true #重定向header问题 routes: client-a: /client/**
d、重试机制
在生产环境中,可能因为各类缘由,致使偶然请求失败,可使用zuul结合ribbon作重试操做,以下:
zuul: retryable: true #开启重试 ribbon: MaxAutoRetries: 1 #同一个服务重试的次数(除去首次) MaxAutoRetriesNextServer: 1 #切换相同服务数量
可是,这个功能要慎用,由于有些接口须要保证幂等性。