如何解决 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跑的微服务项目上面的。

 

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