当前位置:   article > 正文

SpringCloud Gateway网关 -- 开发自定义局部过滤器_gateway自定义局部过滤器

gateway自定义局部过滤器

实现需求:希望打印出方法运行的时间

 filters:
     - StripPrefix=1
     - Time=true/false

1 注意代码中注释的地方

  1. package cn.haiwang.gatewayservice.filter;
  2. import lombok.Data;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.cloud.gateway.filter.GatewayFilter;
  5. import org.springframework.cloud.gateway.filter.GatewayFilterChain;
  6. import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
  7. import org.springframework.stereotype.Component;
  8. import org.springframework.web.server.ServerWebExchange;
  9. import reactor.core.publisher.Mono;
  10. import java.net.URI;
  11. import java.util.Arrays;
  12. import java.util.List;
  13. /**
  14. * 开发自定义局部过滤器,显示方法运行的时间
  15. */
  16. /* 1 添加到Spring Bean中 */
  17. @Component
  18. @Slf4j
  19. /* 2 名称必须以GatewayFilterFactory结尾 */
  20. public class TimeGatewayFilterFactory extends AbstractGatewayFilterFactory<TimeGatewayFilterFactory.PeizhiInfo> {
  21. /* 3 使用无参构造 */
  22. public TimeGatewayFilterFactory() {
  23. super(TimeGatewayFilterFactory.PeizhiInfo.class);
  24. }
  25. @Override
  26. public GatewayFilter apply(PeizhiInfo config) {
  27. return new GatewayFilter() {
  28. @Override
  29. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  30. Boolean showTime = config.showTime;
  31. if(showTime!=null) {
  32. if (showTime.equals(false)) {
  33. return chain.filter(exchange);
  34. }
  35. }
  36. URI uri = exchange.getRequest().getURI();
  37. exchange.getAttributes().put("BEGIN_TIME",System.currentTimeMillis());
  38. return chain.filter(exchange).then(Mono.fromRunnable(()->{
  39. Long beginTime = exchange.getAttribute("BEGIN_TIME");
  40. if(beginTime!=null) {
  41. log.warn(uri+" 请示耗时 {} ms",System.currentTimeMillis() - beginTime);
  42. }
  43. }));
  44. }
  45. };
  46. }
  47. /*
  48. 60行 和 65行 名称要对应上
  49. */
  50. @Override
  51. public List<String> shortcutFieldOrder() {
  52. return Arrays.asList("showTime");
  53. }
  54. @Data
  55. protected static class PeizhiInfo {
  56. private Boolean showTime;
  57. }
  58. }

2 使用上面的过滤器

  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. - id: product_route
  6. uri: lb://product-service # lb指的是从nacos中按照名称获取微服务,并遵循负载均 衡策略
  7. predicates:
  8. - Path=/product-serv/**
  9. filters:
  10. - StripPrefix=1
  11. - Time=false # 使用自定义局部过滤器 ,不打印运行时间
  12. - id: order_route
  13. uri: lb://order-service # lb指的是从nacos中按照名称获取微服务,并遵循负载均 衡策略
  14. predicates:
  15. - Path=/order-serv/**
  16. filters:
  17. - StripPrefix=1
  18. - Time=true # 使用自定义局部过滤器 ,打印运行时间

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/667812
推荐阅读
相关标签
  

闽ICP备14008679号