Zuul
Zuul 是 Netflix 公司提供的一种网关服务。
zuul 的功能:
- 权限控制,可以做认证和授权
- 监控
- 动态路由
- 负载均衡
- 静态资源处理
Zuul 中的功能基本上都是基于过滤器来实现的,它的过滤器有几种不同的类型:
- PRE
- ROUTING
- POST
- ERROR
Hello,Zuul
- 首先创建一个 spring boot 项目,添加 zuul 依赖。
- 在 application.yml 中配置,注册到 eureka 中。
- 在启动类上添加启动注解 @EnableZuulProxy // 开启网关代理。
- 启动 eureka,provider,zuul 服务
- 请求代理测试访问:localhost:2020/provider/hello,在这个地址中,provider 就是要访问的服务名称,/hello 就是访问的服务接口。
zuul 路由规则自定义
1 | ## 自定义 zuul 路由规则 |
上面这个配置,表示 /sihai-a/**,满足这个匹配规则的请求,将被转发到 provider 实例上。
简化配置方案:
1 | ## 自定义 zuul 路由规则 |
zuul 请求过滤
对于来自客户端的请求,我们可以在 zuul 中进行预处理,例如权限判断等。
定义一个简单的权限过滤器 /PermissFilter
重启项目后,接下来发送请求必须带上 username 和 password 参数,否则请求会被过滤器拦截,参数必须要和定义的相同才可以访问。
正常访问: localhost:2020/sihai-a/hello?username=sihai&password=root
非法访问: localhost:2020/sihai-a/hello?username=sihaisihai&password=rootroot
zuul 的其他配置
匹配规则
例如有两个服务,一个叫 consumer,另外一个叫 consumer-hello,同时在做路由规则设置的时候,如果出现了如下配置:
1 | ## 自定义 zuul 路由规则 |
那么此刻如果访问如下地址:http://localhost:2020/consumer/hello/123 ,会出现冲突情况。实际上,这个地址是希望和 consumer-hello 这个服务匹配上的,那么这个时候,只需要将配置文件改为 yml 格式就可以了。因为 properties 格式是无序的,而 yml 格式是有序的。
忽略路径
默认情况下,zuul 注册到 eureka 上之后,eureka 上的所有注册服务都会被自动代理。如果不希望给某一个服务做代理,可以忽略该服务。配置如下:
1 | zuul: |
上面这个配置表示忽略 provider 服务,此时就不会自动代理 provider 服务了。
也可以忽略某一类地址:
1 | zuul: |
上面配置表示请求路径中如果包含 hello,则不做代理。
请求前缀
也可以给路由添加请求前缀
1 | zuul: |
这样,以后所有的请求地址自动多了前缀 /sihai