首先,如果是使用內置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跑的微服務項目上面的。