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