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 |
|