首先说说我遇到的情况,我是在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
版权声明:本文为weixin_41575023原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。