2.4 全局过滤器(Global Filters)配置
    image.png
    局部过滤器和全局过滤器区别:
    局部:局部针对某个路由, 需要在路由中进行配置
    全局:针对所有路由请求, 一旦定义就会投入使用
    GlobalFilter 接口和 GatewayFilter 有一样的接口定义,只不过, GlobalFilter 会作用于所有路由。
    2.4.1 LoadBalancerClientFilter
    LoadBalancerClientFilter 会查看exchange的属性 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 的值(一个URI),如果该值的scheme是 lb,比如:lb://myservice ,它将会使用Spring Cloud的LoadBalancerClient 来将 myservice 解析成实际的host和port,并替换掉 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 的内容。
    其实就是用来整合负载均衡器Ribbon的

    1. 局部过滤器和全局过滤器区别:
    2. 局部:局部针对某个路由, 需要在路由中进行配置
    3. 全局:针对所有路由请求, 一旦定义就会投入使用
    4. GlobalFilter 接口和 GatewayFilter 有一样的接口定义,只不过, GlobalFilter 会作用于所有路由。
    5. 2.4.1 LoadBalancerClientFilter
    6. LoadBalancerClientFilter 会查看exchange的属性 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 的值(一个URI),如果该值的scheme lb,比如:lb://myservice ,它将会使用Spring Cloud的LoadBalancerClient 来将 myservice 解析成实际的host和port,并替换掉 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 的内容。
    7. 其实就是用来整合负载均衡器Ribbon

    2.4.2 自定义全局过滤器

    1. /***
    2. * @Author 徐庶 QQ:1092002729
    3. * @Slogan 致敬大师,致敬未来的你
    4. */
    5. @Component
    6. public class LogFilter implements GlobalFilter {
    7. Logger log= LoggerFactory.getLogger(this.getClass());
    8. @Override
    9. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    10. log.info(exchange.getRequest().getPath().value());
    11. return chain.filter(exchange);
    12. }
    13. }

    Reactor Netty 访问日志
    要启用 Reactor Netty 访问日志,请设置-Dreactor.netty.http.server.accessLogEnabled=true.
    它必须是 Java 系统属性,而不是 Spring Boot 属性。
    您可以将日志记录系统配置为具有单独的访问日志文件。以下示例创建一个 Logback 配置:
    例 67.logback.xml

    1. <appender name="accessLog" class="ch.qos.logback.core.FileAppender">
    2. <file>access_log.log</file>
    3. <encoder>
    4. <pattern>%msg%n</pattern>
    5. </encoder>
    6. </appender>
    7. <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
    8. <appender-ref ref="accessLog" />
    9. </appender>
    10. <logger name="reactor.netty.http.server.AccessLog" level="INFO" additivity="false">
    11. <appender-ref ref="async"/>
    12. </logger>