javascript
SpringCloud Gateway配置自定义路由404坑
一、場景復現
微服務自定義路由,返回404頁面。
①如圖:
(1)springcloud-gateway的路由設置
@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生效
猜測應該是lb路由不生效,于是改成yaml試試
?
?
二、route改為yaml配置
(1)配置/micro-service/**則有效②
訪問結果:
(2)配置/micro/**則訪問無效
訪問/micro/test 404:
無意中訪問/micro-service/test有結果③:
訪問/micro-service1/test 拋異常:
?
三、反思現象
(1)深探問題
訪問配置的路由404,訪問注冊的服務名有結果,訪問不存在的路由則報錯。非常郁悶,究竟哪里配置錯誤了。
猜測肯定是訪問到了micro-service,但為什么沒用結果。于是給micro-service服務配置默認路徑,才發現原因
@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請求有結果,如下:?
轉發的路徑多了/micro,帶多一級路徑轉發了。
(2)查看gateway的說明文檔
1)發現path和PrefixPath?的區別
path是帶匹配路徑轉發請求,需要StripPrefix來截掉匹配模式不轉發。
PrefixPath是不轉發匹配的模式。
gateway path這里跟zuul的默認去掉匹配模式路徑不一樣,被zuul誤導了。
2)gateway自動服務注冊發現路由
①問題是沒有gateway網關自動服務注冊發現路由,通過編碼的RouteLocator設置帶前綴請求404
②問題是yaml配置加載后,配置了gateway網關自動服務注冊發現路由,覆蓋了yaml的配置,所以能訪問成功
③問題是配置了gateway網關自動服務注冊發現路由
?
?
四、解決方案
(1)使用服務注冊自動發現路由
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?
?
總結
以上是生活随笔為你收集整理的SpringCloud Gateway配置自定义路由404坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大面积木制覆盖 + 三联屏,问界 M9
- 下一篇: SpringCloud Zuul(十)之