什么是
Zuul
Spring Cloud Zuul
是整合
Netflix
公司的
Zuul
开源项目(官方:
https://github.com/Netflix/zuul
);
Zuul
包含了对
请求路由和校验过滤
两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础
客户端请求网关/api/product
,通过路由转发到
product
服务
客户端请求网关/api/order
,通过路由转发到
order
服务
而过滤功能则负责对请求的处理过程进行干预,是实现请求校验等功能的基础
.
Zuul
和
Eureka
进行整合,将
Zuul
自身注册为
Eureka
服务治理中的服务,同时从
Eureka
中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul
跳转后获得。
注意:
Zuul
服务最终还是会注册进
Eureka
Zuul
路由功能实战
新建
microservice-cloud-10-zuul-gateway-7001
配制
pom.xml
文件
![](https://i-blog.csdnimg.cn/direct/3c91dee7c76a4b639d6cd448c6edbe89.png)
![](https://i-blog.csdnimg.cn/direct/67afe1ef27ec4816a07cfc1e646e6077.png)
配置
application.yml
文件
端口号:7001
,服务名:
microservice-zuul-gateway
![](https://i-blog.csdnimg.cn/direct/081045b2490b43d1b165221bc40008a5.png)
配置启动类
使用
@EnableZuulProxy
注解标注启动类,开启
zuul
的功能
![](https://i-blog.csdnimg.cn/direct/70325e2ddbc6417796067f1957e7e333.png)
![](https://i-blog.csdnimg.cn/direct/ed17b45938fe4465bec127ae8d0ed16f.png)
测试
zuul
是否已被注册
测试
zuul
路由服务是否注册进
Eureka
注册中心
启动
2
个
eureka
启动服务提供者:
microservice-cloud-08-provider-product-hystrix-8001
启动路由:
microservice-cloud-10-zuul-gateway-7001
效果如下:
http://eureka6001.com:6001/
![](https://i-blog.csdnimg.cn/direct/eed3d725dbc04c21a486d5cf8e4ddf21.png)
不用路由直接访问
访问:
http://localhost:8001/product/get/1
使用路由访问
(
注意是
7001
端口
),
当前要加上服务名
访问:
http://localhost:7001/microservice-product/product/get/1
路由转发映射配置
在
application.yml
配置文件中追加部分
![](https://i-blog.csdnimg.cn/direct/94975fac7015438fbca492a6bcf0020b.png)
最终
application.yml
配置
![](https://i-blog.csdnimg.cn/direct/b5298b8c03ec48709fd31dee7f7c1a96.png)
测试
zuul
路由功能
1.
基于上面
8.2.5
测试启动的服务中
,
重启路由:
microservice-cloud-10-zuul-gateway-7001
2.
未配置
路由转发映射
,
通过路由请求方式
:
http://localhost:7001/microservice-product/product/get/1
3.
已配置
路由转发映射
,
通过路由请求方式
:
http://localhost:7001/product/get/1
只要接收到
/product
开头的路径,就会转发到
microservice-cloud-08-provider-product-hystrix-8001
服务
Zuul
过滤器实战
Zuul
核心就是过虑器,通过过虑器实现请求过虑,身份校验等。
自定义过滤器
自定义过虑器需要继承
ZuulFilter
,
ZuulFilter
是一个抽象类,需要覆盖它的
4
个方法,如下:
filterType
:返回字符串代表过滤器的类型,返回值有:
pre
:在请求路由之前执行
route
:在请求路由时调用
post
:请求路由之后调用, 也就是在
route
和
errror
过滤器之后调用
error
:处理请求发生错误时调用
filterOrder
:此方法返回整型数值,通过此数值来定义过滤器的执行顺序,数字越小优先级越高。
shouldFilter
:返回
Boolean
值,判断该过滤器是否执行。返回
true
表示要执行此过虑器,
false
不执行。
run
:过滤器的业务逻辑。
自定义过滤器
LoginFilter
继承
ZuulFilter
在类上添加
@Component
注解
(
一定不要少了
)
实现抽象方法
![](https://i-blog.csdnimg.cn/direct/fe67862f82544a0e8e536f65c3e28add.png)
![](https://i-blog.csdnimg.cn/direct/bb76cd0c19ce4d5ea21f6ac0a3e78cf0.png)
测试功能
1.
启动
2
个
eureka
2.
启动服务提供者:
microservice-cloud-08-provider-product-hystrix-8001
3.
启动路由:
microservice-cloud-10-zuul-gateway-7001
.
通过路由(
7001
)访问服务提供者:
不带
token
参数访问:
http://localhost:7001/product/get/1
![](https://i-blog.csdnimg.cn/direct/0844b25c178b4df491232269c1b5c1d2.png)
带
token
参数访问:
http://localhost:7001/product/get/1?token=123
![](https://i-blog.csdnimg.cn/direct/12920da927964d359be1bef4aa41679b.png)
带上
token
校验通过放行。