Pig 3.0 采用的是spring官方的网关组件,通过异步背压的高性能网关。路由配置是整个微服务中最为核心的功能

① 配置路由解释

访问 nacos /pig-gateway-dev.yml 我们以UPMS 的路由为例子,注意注释

  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. #UPMS 模块
  6. - id: pig-upms # 唯一的服务ID
  7. uri: lb://pig-upms # 注册中心的服务名称,实现负载均衡
  8. predicates:
  9. - Path=/admin/** #所有业务的请求前缀,会在② 中自动去除

② 全局的路由过滤器

PigRequestGlobalFilter,对全部的微服务提供了安全过滤(这个后边会讲)和全局StripPrefix=1配置,意味着你在使用Pig的时候,网关转发到业务模块时候会自动截取前缀,不用再每个微服务路由配置了StripPrefixFilter

  1. public class PigRequestGlobalFilter implements GlobalFilter, Ordered {
  2. private static final String HEADER_NAME = "X-Forwarded-Prefix";
  3. @Override
  4. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  5. // 1. 清洗请求头中from 参数
  6. ServerHttpRequest request = exchange.getRequest().mutate()
  7. .headers(httpHeaders -> httpHeaders.remove(SecurityConstants.FROM))
  8. .build();
  9. // 2. 重写StripPrefix
  10. addOriginalRequestUrl(exchange, request.getURI());
  11. String rawPath = request.getURI().getRawPath();
  12. String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/"))
  13. .skip(1L).collect(Collectors.joining("/"));
  14. ServerHttpRequest newRequest = request.mutate()
  15. .path(newPath)
  16. .build();
  17. exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
  18. return chain.filter(exchange.mutate()
  19. .request(newRequest.mutate()
  20. .build()).build());
  21. }
  22. @Override
  23. public int getOrder() {
  24. return -1000;
  25. }
  26. }

❤ 问题咨询

手势点击蓝字求关注简约风动态引导关注__2022-09-07+23_18_38.gif