首先说说我遇到的情况,我是在gateway网关服务中配置了Sagger2,然后再进行多路由配置。

先看看一开始的错误配置

uri:
  admin: lb://admin-client
  device: lb://device-client
server:
  port: 8799
spring:
  cloud:
    gateway:
      routes:
        - id: host_route
          uri: ${uri.admin}
          predicates:
            - Path=/**
          filters:
            - name: Hystrix
              args:
                name: fallbackcmd
                fallbackUri: forward:/fallback

        - id: device_route
          uri: ${uri.device}
          predicates:
            - Path=/**
          filters:
            - name: Hystrix
              args:
                name: fallbackcmd
                fallbackUri: forward:/fallback
         

以上配置重点在 predicates 的 path上, 这个path的意思是发送指定路径会匹配指定路由,我两个都是/**,它默认会每次都访问第一个路由,所以我的swagger2上怎么样也请求不到第二个路由的东西,所以需要给两者做出区分

那么将上方 path 改为 /admin/** ,下方path 改成 /device/** ,这样改了后的确是可以访问到了,但每次请求都会带上path的内容作为前缀,这时再加上一个参数 StripPrefix ,就能达到我们所想的效果,即指定了路由又没增加多余的东西在路径上。

StripPrefix=1 ,会让 /admin/a 的路径变成/a,等于2等于3则依此类推。

正确的配置如下

spring:
  cloud:
    gateway:
      routes:
        - id: host_route
          uri: ${uri.admin}
          predicates:
            - Path=/admin/**
          filters:
            - name: Hystrix
              args:
                name: fallbackcmd
                fallbackUri: forward:/fallback
            #去除/admin
            - StripPrefix=1

        - id: device_route
          uri: ${uri.device}
          predicates:
            - Path=/device/**
          filters:
            - name: Hystrix
              args:
                name: fallbackcmd
                fallbackUri: forward:/fallback
            #去除/device
            - StripPrefix=1

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐