端点
如何查看断点映射关系?
当我们门为了能看到端点的映射信息可以在zuul中导入actuator
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
我们可以访问http://localhost:5000/actuator/routes 地址查看我们配置的路由映射
zuul会将注册到eureka上的客户端默认以名字为端点的信息做映射所有我们在访问网关地址可以使用配置的网关地址也可以使用默认的地址
如何禁用默认行为?可以通过zuul的ignored-patterns 参数进行配置
zuul: # 配置网关路由
routes:
eureka-client-api:
path: /eureka-client-api/** #当/eureka-client-api 开头的他会将其转发给eureka-client
service-id: eureka-client
feign-client-api:
path: /eureka-feign-api/** #同上
service-id: feign-client
ignored-patterns: /eureka-feign/**,/eureka-client/** #禁用默认的端点映射
查看zuul请求转发日志
logging:
level:
com.nitflix: debug # 查看zuul网关的请求日志
重新访问
网关可以将hander 头信息通过路由转发到对应的微服务当中吗?
1.基于client 打出authKey2的信息
2.我们通过postMan可以请求对应信息传入hander信息
此时client控制台打印了
总结:由上可以看出新版Zuul我们在发出请求自带了hander的时候通过zuul是可以请求转发自定义hander,而老版本不会携带自定义hander
如何过滤掉不需要的hander?
- 1.全局配置
ignored-headers:参数
此时重新访问就被过滤掉了
过滤器
zuul内置了大量的过滤器可以对请求一层又一层的过滤
ZuulFilter
doc
- zuulfilter的基本抽象类。基类定义了要定义的抽象方法:
filterType()—按类型对筛选器进行分类。Zuul中的标准类型是“pre”用于预路由筛选,“route”用于路由到源站,“post”用于后路由筛选器,“error”用于错误处理。我们还支持静态响应的“static”类型请参见StaticResponseFilter。创建或添加任何筛选器类型并通过调用FilterProcessor.runFilters(类型) - 还必须为筛选器定义filterOrder()。如果优先级对筛选器不重要,则筛选器可能具有相同的filterOrder。FilterOrder不需要是顺序的。
- zuulfilter可以使用Archius属性禁用。
这里面有两个比较重要的方法filterType和filterOrder
/**
按类型对过滤器进行分类。Zuul中的标准类型是:
“pre”用于路由前的过滤,
“routing”用于路由到源站(微服务),
“post”用于完成之后的过滤器,
“error”用于错误处理。
我们还支持静态响应的“static”类型请参见StaticResponseFilter。创建或添加任何筛选器类型并通过调用
FilterProcessor.runFilters(类型)
* @return 表示该类型的字符串
*/
abstract public String filterType();
/**
*还必须为过滤器定义filterOrder()。如果优先级对过滤器不重要,
则过滤器可能具有相同的filterOrder。FilterOrder不需要是顺序的。
*
* @return 过滤器的顺序 zuul按顺序最小的执行 顺序可以为负数 且允许两个过滤器顺序相同
*/
abstract public int filterOrder();
如何使用过滤器 只需要继承ZuulFilter将filterType和filterOrder实现出来 具体的执行逻辑IZuulFilter里面
run()方法里面 具体执行根据shouldFilter()方法来决定 每个过滤器都会先去shouldFilter 再决定是否执行
/**
* BAse interface for ZuulFilters
* zuulfilter的基本接口
*
* @author Mikey Cohen
* Date: 10/27/11
* Time: 3:03 PM
*/
public interface IZuulFilter {
/**
* 此方法的“true”返回意味着应该调用run()方法
*
* @return 如果应调用run()方法,则为true。false不会调用run()方法
*/
boolean shouldFilter();
/**
*如果shouldFilter()为true,则将调用此方法。此方法是ZuulFilter的核心方法
*
* @return S可能会返回一些任意工件。当前的实现忽略了它。 (返回参数不重要可以忽略)
* @throws ZuulException if an error occurs during execution.
*/
Object run() throws ZuulException;
}