1. 简介
在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服务,服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理,配置服务的配置文件放在git仓库,方便开发人员随时改配置。
一、Zuul简介
Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。
zuul有以下功能:
- Authentication
 - Insights
 - Stress Testing
 - Canary Testing
 - Dynamic Routing
 - Service Migration
 - Load Shedding
 - Security
 - Static Response handling
 - Active/Active traffic management
 
spring cloud zuul的架构图如下:
在Zuul中一次http请求的生命周期如下:

2. Zuul的路由
创建项目:

配置
1  | spring:  | 
路由转发功能:
1  | @SpringBootApplication  | 
然后假如你想访问的微服务的id是product,然后访问的页面是微服务下的product/list页面,则启动应用之后你只需要访问localhost:8080/product/product/list既可以了。只要是你注册在服务中心的应用都可以路由访问到。
自定义路由:
添加配置
1  | zuul:  | 
myProduct:是你自己定义的名称(可以随便定义),path是你自己定义的路径, serviceId: 是你要访问的服务的ID,访问localhost:8080/myProduct/product/list就可以访问了。
禁止掉某一些路由:ignored-patterns:下面配置你想要禁止访问的路由即可,下面配置的是set类型的数据
1  | zuul:  | 
还能写成
1  | ignored-patterns:  | 
然后在配置里面添加sensitiveHeaders:并置为空,这样子就可以从前端获取到cokkie了。
1  | zuul:  | 
3. Zuul的过滤功能
要想过滤的话继承ZuulFilter类并实现其中的方法即可,这里实现的是过滤掉URL后没有token后缀的url地址。pre过滤器。
pre 过滤器的话默认放在PRE_DECORATION_FILTER_ORDER 前面
1  | 
  | 
post过滤器:类型POST_TYPE,优先级默认在SEND_RESPONSE_FILTER_ORDER前面
1  | 
  | 
4. Zuul限流
限流放在pre过滤器中使用,在请求被转发之前调用。并且限流是最高的,因为限流的话是要要放在最前面实现的。
令牌桶限流。

具体实现如下:
1  | 
  | 
5. Zuul鉴权
1  | 
  | 
5. Zuul跨域访问
首先在springboot中要想对某一个接口跨域访问的话,直接在该方法或者是类上添加
@CrossOrigin的注解,表明可以支持跨域访问。
1  | 
  | 
