最近学习 SCG 1 、GlobalFilter 类型的过滤器,可以通过实现 Ordered 接口,来设置该过滤器的调用优先级。
2 、使用 FilterGatewayFactory 可以更灵活的配置某一路由的规则,使用方式为继承 AbstractGatewayFilterFactory ,实现 apply 接口,将过滤逻辑以 GatewayFilter 的形式返回。
3 、观察 SCG 自身的 JsonToGrpcGatewayFilterFactory,ReqeustHeaderToRequestUriGatewayFilterFactory 等,使用 OrderedGatewayFilter 设置了 order 值。
4 、自定义 GatewayFilterFactory ,通过 3 中的方式设置了 order 值,但发现无论怎么设置,都无法与自定义的 GlobalFilter 中的日志调换优先度。
5 、具体的场景细节:
5.1 LoggerGlobalFilter 作为全局过滤器,打印 HTTP 响应报文的日志,order 值假设为 a, a 小于-1 。(因为大于-1 就抓不到响应的报文内容了)。
5.2 ABCModifyResponseGatewayFilterFactory 作为工厂类,可根据需要配置给某路由进行返回报文的修改,使用 OrdedGatwayFilter 的方式,order 值设为 b 。
5.3 上述两个操作,希望响应报文的日志最先打印,然后再进行修改操作。无论 b<a<-1 ,还是 a<b<-1 ,都无法使 5.1 的日志优先打印出来。