sofa-ark
sofa-ark copied to clipboard
源码解析:多Web部署
介绍
SOFAArk 支持多个 Biz 模块合并安装,如果多个模块都是web server,如果启动的话,就会启动多个tomcat,如何能做到类似普通tomcat 那样,一个tomcat可以部署多个web模块。 也就是支持多个 Web 应用合并部署,提供了多 Host/单 Host 两种模式
难度: 🌟🌟🌟
重点源码
com.alipay.sofa.ark.web.embed.tomcat.ArkTomcatEmbeddedWebappClassLoader
com.alipay.sofa.ark.springboot.web.ArkTomcatServletWebServerFactory
衍生思考
在这个基础上如何支持 webFlux呢?
/assign
/assign hello~ 领取任务后欢迎添加 SOFAGirl 微信:SOFAGirl180419,备注“SOFAArk源码解析”,方便我们之后跟进任务以及发布奖品
SOFAGirl180419 got it, thanks
有些问题辛苦抽空确认下哈,非常感谢: 1、上文"如果多个模块都是web server,如果启动的话,就会启动多个tomcat"。指的是一个Ark包启动时,可以在这同一个java进程中为每个Biz独立创建一个端口不同的embedded tomcat嘛?就我所知原生springboot不支持这么做,会报错,sofa-ark也只是针对多Biz共用同一个tomcat做了支持,没有处理这种情况。 2、ArkTomcatEmbeddedWebappClassLoader注释中的case2,是否与问题1指的是同一种场景? 3、合并部署的多host模式是指每个biz有自己的独立hostname嘛,这个是怎么开启配置的?所有文档和代码里都没有看到。而且我也看到找到原生springboot支持多host配置的方式。
目前按我理解已经写好的部分:https://github.com/WuHang1/sofa-ark/blob/code_analyse_multi_web_deploy/doc/CODE_ANALYSE_MULTI_WEB.md PR:https://github.com/sofastack/sofa-ark/pull/523
有些问题辛苦抽空确认下哈,非常感谢: 1、上文"如果多个模块都是web server,如果启动的话,就会启动多个tomcat"。指的是一个Ark包启动时,可以在这同一个java进程中为每个Biz独立创建一个端口不同的embedded tomcat嘛?就我所知原生springboot不支持这么做,会报错,sofa-ark也只是针对多Biz共用同一个tomcat做了支持,没有处理这种情况。 2、ArkTomcatEmbeddedWebappClassLoader注释中的case2,是否与问题1指的是同一种场景? 3、合并部署的多host模式是指每个biz有自己的独立hostname嘛,这个是怎么开启配置的?所有文档和代码里都没有看到。而且我也看到找到原生springboot支持多host配置的方式。
感谢你的提问,
- 多个模块都是 webServer的话,要是会尝试启动多个tomcat,如果使用的是同一个端口是会报错的,所以 SOFAArk 里如果不引入 web-ark-plugin的话,是要不同的模块配置不同的端口的。对于 Tomcat 本身来说,特别是早期非内嵌tomcat模式里,一般是服务端提前启动好tomcat,然后不断把Server动态添加到同一个tomcat里。 SOFAArk 也是为了支持这种更标准的用法,所以增加了 web 相关的能力。
- 是的
- 在 SOFAArk 模块打包插件的配置里可以指定 webContextPath, 不同的webServer可以指定相同的 webContextPath, 也可以使用不同的webContextPath. 不过我看你已经写了解析报告了,分析也的比较详细,你看根据我的补充是否需要再调整下。
理解了,非常感谢,我再修改下报告
已修改更新,加入了多host模式的说明,以及两种模式的对比部分
如何动态安装多个web模块 呢?默认安装是报端口被占用的错误
@ixufeng 先把老模块卸载并且连接池等都清理掉。
源码解析任务已完成,close issue。