如何解決 springcloud zuul 路由不到外置tomcat運行的cloud項目

首先,如果是使用內置tomcat運行(java -jar命令)來跑項目,怎麼路由到,網上有很多教程,這裏就不描述了

關於如何使用zuul路由到外置tomcat,

首先外置tomcat運行會有一個war包名的問題,需要帶上war包(自動帶上)名字來能訪問 如 http://192.168.6.55/API/server/info

所以我們在跑我們的cloud項目的時候,配置文件的兩項配置是失效的

因爲使用外置tomcat來跑的時候會用外置tomcat的運行端口(在tomcat的conf目錄server.xml進行配置),同時我們的

server.servlet.context-path 會變成我們放在webapp目錄下的war包名稱,例如我們的項目打包成war包的時候叫user,那麼這個path就是user

第二點就是:我們將項目註冊到erueka的時候,springboot啓動程序是掃配置文件的port和context-path的屬性註冊到註冊中心的,所以註冊到註冊中心的值就是這個配置的值,springboot壓根不會管你在外置tomcat運行的時候真正的 port和context - path,所以我們在啓動項目的時候,把這個port配置成tomcat真正的運行端口這個context-path 就配置成你打包出來的war包名,記得前面加 “/”,這個cloud項目這邊就配置好了

第三點就是:zuul那邊的配置了

 

zuul.prefix 這個一定要配置api前綴(這裏不知道什麼原理,不配置前綴還是路由不到),path就是不根據你服務名,根據路徑來訪問你這個服務,這裏有個很重要的點,就是你的path要跟你跑在外置tomcat項目的war包名一定要相同(我試過不相同就訪問不到了),service-id就是你跑在外置tomcat那個cloud項目的serviceId(正常來說就是

spring.application.name

,這裏也可以不叫user,總之zuul和外置項目對應好就行

同時一定要加這個屬性 strip-prefix,這個是忽略前綴進行轉發,就是轉發到你跑在外置tomcat的cloud服務的時候,會自動去掉ALL_API這個前綴

到這裏配置完畢,我們先來啓動部署在外置tomcat的cloud項目,由於我的外置tomcat的端口和打包成的war包名跟配置文件一樣,所以項目跑起來會以這個端口和服務名註冊到eureka

先直接訪問原本的url(不經過zuul轉發)  : 

http://127.0.0.1:8320/user/server/info,結果正常

然後我們再訪問通過zuul轉發的url進行訪問

http://127.0.0.1:9001/API_ALL/user/server/info,也是能訪問成功的

至此大功告成

題主曾經在網上查閱了很多資料,都沒有這方面的資料,就想寫下這篇博客加深印象,其中zuul的轉發原理有些還是不太明白,有空再去專研下zuul的源碼,這篇文章從使用的角度出發,是可以將zuul的請求轉發到外置tomcat跑的微服務項目上面的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章