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

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

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

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

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

predicates:请求的路径

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

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

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

 ServerHttpRequest request = exchange.getRequest();
                ServerWebExchangeUtils.addOriginalRequestUrl(exchange, request.getURI());
                String path = request.getURI().getRawPath();
                String newPath = "/" + (String)Arrays.stream(StringUtils.tokenizeToStringArray(path, "/")).skip((long)config.parts).collect(Collectors.joining("/"));
                newPath = newPath + (newPath.length() > 1 && path.endsWith("/") ? "/" : "");
                ServerHttpRequest newRequest = request.mutate().path(newPath).build();
                exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
                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/** 不做路径剥离直接请求。

spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      routes:
        - id: api-user
          uri: lb://user-service
          order: 8001
          predicates:
            - Path=/user-service/**
          filters:
            - StripPrefix=1
        - id: api-auth1
          uri: lb://oauth-service
          order: 8003
          predicates:
            - Path=/oauth-service/oauth/token
          filters:
            - StripPrefix=0

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WannaRunning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值