springcloud gateway网关多路由配置访问404解决方案
首先说说我遇到的情况,我是在gateway网关服务中配置了Sagger2,然后再进行多路由配置。先看看一开始的错误配置uri:admin: lb://admin-clientdevice: lb://device-clientserver:port: 8799spring:cloud:gateway:routes:- id: host_routeuri: ${uri.admin}pre
·
首先说说我遇到的情况,我是在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
更多推荐
已为社区贡献2条内容
所有评论(0)