日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud Gateway配置自定义路由404坑

發(fā)布時(shí)間:2023/12/3 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud Gateway配置自定义路由404坑 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、場景復(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。