当前位置:   article > 正文

Spring Cloud Gateway——路由配置(YML配置方式)_gateway yml配置

gateway yml配置

通过配置文件配置路由是最简单的配置方式,下面是一组实例:

id:唯一路由表示,没有实际作用不重复就好

uri:lb://集群中服务名称。(需要把gateway服务也注册到注册中心中,否则获取不到真实得服务ip信息)

order:优先级(数字越小越优先匹配)

predicates:请求的路径

filters:该路由要配置执行的过滤器(写法:- 过滤器名称)

这里使用了StripPrefix这个过滤器,对应StripPrefixGatewayFilterFactory这个内置的过滤器工厂类,作用是转发请求前 从请求中剥离的路径个数,StripPrefix=0表示不剥离,StripPrefix=1表示剥离一层。

过滤器的实现逻辑如下,其实就是根据设置截取设置新的路径

  1. ServerHttpRequest request = exchange.getRequest();
  2. ServerWebExchangeUtils.addOriginalRequestUrl(exchange, request.getURI());
  3. String path = request.getURI().getRawPath();
  4. String newPath = "/" + (String)Arrays.stream(StringUtils.tokenizeToStringArray(path, "/")).skip((long)config.parts).collect(Collectors.joining("/"));
  5. newPath = newPath + (newPath.length() > 1 && path.endsWith("/") ? "/" : "");
  6. ServerHttpRequest newRequest = request.mutate().path(newPath).build();
  7. exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
  8. return chain.filter(exchange.mutate().request(newRequest).build());

假设user-service和oauth-service的服务地址分别是http://127.0.0.1:8070,http://127.0.0.1:8060

例如下面的写法中,user-service最终转发后的路径就是:http://127.0.0.1:8070/** 剥离掉了一层user-service路径

而oauth-service中最终路径是:http://127.0.0.1:8060/oauth-service/** 不做路径剥离直接请求。

  1. spring:
  2. application:
  3. name: gateway
  4. cloud:
  5. gateway:
  6. discovery:
  7. locator:
  8. lowerCaseServiceId: true
  9. enabled: true
  10. routes:
  11. - id: api-user
  12. uri: lb://user-service
  13. order: 8001
  14. predicates:
  15. - Path=/user-service/**
  16. filters:
  17. - StripPrefix=1
  18. - id: api-auth1
  19. uri: lb://oauth-service
  20. order: 8003
  21. predicates:
  22. - Path=/oauth-service/oauth/token
  23. filters:
  24. - StripPrefix=0

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

闽ICP备14008679号