javascript
SpringCloud Gateway配置自定义路由404坑
一、場景復(fù)現(xiàn)
微服務(wù)自定義路由,返回404頁面。
①如圖:
(1)springcloud-gateway的路由設(shè)置
@Configuration public class RouteConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("test", r -> r.path("/csdn/**").uri("https://blog.csdn.net")).route("micro-service", r -> r.path("/micro-service/**").uri("lb://micro-service")).build();} }(2)micro-service的controller
@RestController public class TestController {@GetMapping("/test")public String test(HttpServletRequest request){return "hello world, uri:" + request.getRequestURI();}}(3)nacos注冊中心
(4)請求CSDN生效
猜測應(yīng)該是lb路由不生效,于是改成yaml試試
?
?
二、route改為yaml配置
(1)配置/micro-service/**則有效②
訪問結(jié)果:
(2)配置/micro/**則訪問無效
訪問/micro/test 404:
無意中訪問/micro-service/test有結(jié)果③:
訪問/micro-service1/test 拋異常:
?
三、反思現(xiàn)象
(1)深探問題
訪問配置的路由404,訪問注冊的服務(wù)名有結(jié)果,訪問不存在的路由則報(bào)錯(cuò)。非常郁悶,究竟哪里配置錯(cuò)誤了。
猜測肯定是訪問到了micro-service,但為什么沒用結(jié)果。于是給micro-service服務(wù)配置默認(rèn)路徑,才發(fā)現(xiàn)原因
@RestController public class TestController {@GetMapping("/test")public String test(HttpServletRequest request){return "hello world, uri:" + request.getRequestURI();}@GetMapping("/**")public String defaultPath(HttpServletRequest request){return "hello world, uri:" + request.getRequestURI();} }/micro/test請求有結(jié)果,如下:?
轉(zhuǎn)發(fā)的路徑多了/micro,帶多一級路徑轉(zhuǎn)發(fā)了。
(2)查看gateway的說明文檔
1)發(fā)現(xiàn)path和PrefixPath?的區(qū)別
path是帶匹配路徑轉(zhuǎn)發(fā)請求,需要StripPrefix來截掉匹配模式不轉(zhuǎn)發(fā)。
PrefixPath是不轉(zhuǎn)發(fā)匹配的模式。
gateway path這里跟zuul的默認(rèn)去掉匹配模式路徑不一樣,被zuul誤導(dǎo)了。
2)gateway自動(dòng)服務(wù)注冊發(fā)現(xiàn)路由
①問題是沒有g(shù)ateway網(wǎng)關(guān)自動(dòng)服務(wù)注冊發(fā)現(xiàn)路由,通過編碼的RouteLocator設(shè)置帶前綴請求404
②問題是yaml配置加載后,配置了gateway網(wǎng)關(guān)自動(dòng)服務(wù)注冊發(fā)現(xiàn)路由,覆蓋了yaml的配置,所以能訪問成功
③問題是配置了gateway網(wǎng)關(guān)自動(dòng)服務(wù)注冊發(fā)現(xiàn)路由
?
?
四、解決方案
(1)使用服務(wù)注冊自動(dòng)發(fā)現(xiàn)路由
cloud:gateway:discovery:locator:enabled: truelower-case-service-id: true(2)path路由加去掉前綴信息
cloud:gateway:routes:- id: micro-serviceuri: lb://micro-servicepredicates:- Path=/micro-service/**filters:- StripPrefix=1?
?
總結(jié)
以上是生活随笔為你收集整理的SpringCloud Gateway配置自定义路由404坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大面积木制覆盖 + 三联屏,问界 M9
- 下一篇: gradle idea java ssm