sofastack / sofa-ark

SOFAArk is a light-weight,java based classloader isolation framework.
https://www.sofastack.tech/projects/sofa-boot/sofa-ark-readme/
Apache License 2.0
1.56k stars 497 forks source link

sofa-rpc可以集成sofa-boot热部署功能吗? #163

Closed primary closed 5 years ago

primary commented 5 years ago

我先搭建了sofa-boot ,参考sofa-rpc文档完成配置,单独看dubbo call/service功能是没有问题的,但是我启动sofa-rpc模块后(XXX-executable-ark.jar),telnet 1234,然后check -b 发现无结果:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
sofa-ark>check -b

sofa-ark>check -b

sofa-ark>install -b file:///data0/stark/yunmo/sofa-stark/stark/stark-core/target/stark-core-0.0.1-SNAPSHOT-ark-biz.jar

sofa-ark>check -b

怀疑是不是jar有冲突,我的pom配置如下:

        <!-- 用于跨 ark-biz 调用,是一个 ark-plugin -->
        <dependency>
            <groupId>com.alipay.sofa</groupId>
            <artifactId>runtime-sofa-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alipay.sofa</groupId>
            <artifactId>rpc-sofa-boot-starter</artifactId>
        </dependency>
khotyn commented 5 years ago

看起来是 SOFAArk 的问题?cc @QilongZhang

QilongZhang commented 5 years ago
        <dependency>
            <groupId>com.alipay.sofa</groupId>
            <artifactId>sofa-jarslink-ark-starter</artifactId>
            <classifier>ark-plugin</classifier>
            <version>2.0.0-SNAPSHOT</version>
        </dependency>

尝试引入这个依赖

primary commented 5 years ago
        <dependency>
            <groupId>com.alipay.sofa</groupId>
            <artifactId>sofa-jarslink-ark-starter</artifactId>
            <classifier>ark-plugin</classifier>
            <version>2.0.0-SNAPSHOT</version>
        </dependency>

尝试引入这个依赖

Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. sofa-ark>install -b file:///data0/stark/yunmo/sofa-stark/stark/stark-api/target/stark-api-0.0.1-SNAPSHOT-ark-biz.jar Biz:'stark-api:0.0.1-SNAPSHOT' is installing.

这个问题已经解决了,但是执行安装第二个biz.jar后,出现了问题

第一个biz.jar启动是成功的:

sist&retries=0&revision=1.0&side=consumer&timeout=3000&timestamp=1544701514059&version=1.0], dubbo version: 2.9.4.Default, current host: 172.20.50.165
2018-12-13 19:45:14.112  INFO 20826 --- [           main] c.a.d.config.AbstractInterfaceConfig     :  [DUBBO] Refer dubbo service com.pinduoduo.ad.fred.contract.service.FredStarkService from url fish://172.20.16.159:21810/com.alibaba.dubbo.registry.RegistryService?actives=0&application=stark-api&check=false&cluster=failover&connections=1&dubbo=2.9.4.Default&generic=false&injvm=false&interface=com.pinduoduo.ad.fred.contract.service.FredStarkService&lazy=false&methods=query&pid=20826&proxy=javassist&retries=0&revision=1.0&side=consumer&timeout=3000&timestamp=1544701514059&version=1.0, dubbo version: 2.9.4.Default, current host: 172.20.50.165
2018-12-13 19:45:14.946  INFO 20826 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1cf6d1be: startup date [Thu Dec 13 19:45:07 CST 2018]; root of context hierarchy
2018-12-13 19:45:15.094  INFO 20826 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-12-13 19:45:15.096  INFO 20826 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-12-13 19:45:15.231  INFO 20826 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-12-13 19:45:15.232  INFO 20826 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-12-13 19:45:15.377  INFO 20826 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.sofa.rpc.boot Logback ]
2018-12-13 19:45:15.603  INFO 20826 --- [           main] com.alipay.sofa.common.log               : Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.sofa.rpc.boot Logback ]
2018-12-13 19:45:17.013  INFO 20826 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-12-13 19:45:17.106  INFO 20826 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2018-12-13 19:45:17.115  INFO 20826 --- [           main] c.p.a.s.api.core.StarkCoreApplication    : Started StarkCoreApplication in 10.844 seconds (JVM running for 12.968)
Ark container started in 12695 ms.

启动第二个biz.jar失败了:

2018-12-13 19:45:35.303  INFO 20826 --- [nk-command-0-T1] o.a.coyote.http11.Http11Nio2Protocol     : Pausing ProtocolHandler ["http-nio2-56001"]
2018-12-13 19:45:35.303  INFO 20826 --- [nk-command-0-T1] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-12-13 19:45:35.305  WARN 20826 --- [nk-command-0-T1] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
2018-12-13 19:45:35.314  INFO 20826 --- [nk-command-0-T1] utoConfigurationReportLoggingInitializer :

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2018-12-13 19:45:35.320 ERROR 20826 --- [nk-command-0-T1] o.s.boot.SpringApplication               : Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) ~[spring-context-4.3.19.RELEASE.jar!/:na]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.16.RELEASE.jar!/:na]
    at com.pinduoduo.ad.stark.api.api.StarkApiApplication.main(StarkApiApplication.java:16) [stark-api-0.0.1-SNAPSHOT-ark-biz.jar!/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
    at com.alipay.sofa.ark.bootstrap.MainMethodRunner.run(MainMethodRunner.java:48) [sofa-ark-archive-0.4.0.jar!/:na]
    at com.alipay.sofa.ark.container.model.BizModel.start(BizModel.java:179) [sofa-ark-container-0.4.0.jar!/:na]
    at com.alipay.sofa.jarslink.runtime.command.InstallCommand$1.run(InstallCommand.java:78) [sofa-jarslink-runtime-2.0.0-SNAPSHOT.jar!/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_171]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_171]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_171]
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:138) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:87) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:554) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:179) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:164) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    ... 18 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardServer[-1]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:366) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:114) ~[spring-boot-1.5.16.RELEASE.jar!/:na]
    ... 23 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 25 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 27 common frames omitted
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:950) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 29 common frames omitted
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_171]
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_171]
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 31 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_171]
    ... 3 common frames omitted
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:950) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 6 common frames omitted
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_171]
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_171]
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 8 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 6 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.StandardRoot@23eb3968]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4907) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5042) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 6 common frames omitted
Caused by: java.lang.Error: factory already defined
    at java.net.URL.setURLStreamHandlerFactory(URL.java:1112) ~[na:1.8.0_171]
    at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.<init>(TomcatURLStreamHandlerFactory.java:130) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.getInstanceInternal(TomcatURLStreamHandlerFactory.java:53) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.register(TomcatURLStreamHandlerFactory.java:77) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.webresources.StandardRoot.registerURLStreamHandlerFactory(StandardRoot.java:699) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.webresources.StandardRoot.initInternal(StandardRoot.java:682) ~[tomcat-embed-core-8.5.34.jar!/:na]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107) ~[tomcat-embed-core-8.5.34.jar!/:na]
    ... 10 common frames omitted

看报错,感觉是二个biz.jar重复创建了factory,请问如何解?

primary commented 5 years ago

stark2 0

我现在是想实现这样的一个demo,发现stark-core 和 stark-api 通过SOFAArk安装的时候,第二个biz.jar报了上面的错。

QilongZhang commented 5 years ago

@primary
因为两个应用都是 web 应用,如果需要运行两个web应用,需要将tomcat下沉为一个 ArkPlugin 并导出相关类。

primary commented 5 years ago

@primary 因为两个应用都是 web 应用,如果需要运行两个web应用,需要将tomcat下沉为一个 ArkPlugin 并导出相关类。

有教程吗? 具体怎么操作... 不太明白

QilongZhang commented 5 years ago

支持多web应用还在开发中,建议暂时使用第二个 biz 为 core 应用。 另外我们也在考虑提供一种运行时配置构建 synthetic-plugin 的方式,这样不需要每次将需要下沉的类提前打包成 ark plugin

QilongZhang commented 5 years ago

@primary 因为两个应用都是 web 应用,如果需要运行两个web应用,需要将tomcat下沉为一个 ArkPlugin 并导出相关类。

有教程吗? 具体怎么操作... 不太明白

ok, 我稍后提供一个简单的demo演示

primary commented 5 years ago

@primary 因为两个应用都是 web 应用,如果需要运行两个web应用,需要将tomcat下沉为一个 ArkPlugin 并导出相关类。

有教程吗? 具体怎么操作... 不太明白

ok, 我稍后提供一个简单的demo演示

我已经搞成一个web应用了,另外一个只暴露jvm服务,当成纯ark包提供服务就好了

primary commented 5 years ago

@primary 因为两个应用都是 web 应用,如果需要运行两个web应用,需要将tomcat下沉为一个 ArkPlugin 并导出相关类。

有教程吗? 具体怎么操作... 不太明白

ok, 我稍后提供一个简单的demo演示

primary commented 5 years ago

sofa-ark>install -b file:///data0/stark/yunmo/sofa-stark/stark/stark-core/target/stark-core-0.0.2-SNAPSHOT-ark-biz.jar Biz:'stark-core:0.0.2-SNAPSHOT' is installing.

sofa-ark>switch -b -n stark-core -v 0.0.2-SNAPSHOT The specified biz's state must not be deactivated.

另外这个bug 能不能打个新包出来 ...

@QilongZhang

QilongZhang commented 5 years ago

参考该 Sample. https://github.com/QilongZhang/jarslink-demo/tree/master/multi-web-app-sample

关键在 https://github.com/QilongZhang/jarslink-demo/blob/master/multi-web-app-sample/spring-plugin/pom.xml 制作 ark plugin, 将 tomcat 下沉

primary commented 5 years ago

参考该 Sample. https://github.com/QilongZhang/jarslink-demo/tree/master/multi-web-app-sample

关键在 https://github.com/QilongZhang/jarslink-demo/blob/master/multi-web-app-sample/spring-plugin/pom.xml 制作 ark plugin, 将 tomcat 下沉

好的,thx

另外jarslink 无法切换的问题,打个新包出来吧...

QilongZhang commented 5 years ago

参考该 Sample. https://github.com/QilongZhang/jarslink-demo/tree/master/multi-web-app-sample 关键在 https://github.com/QilongZhang/jarslink-demo/blob/master/multi-web-app-sample/spring-plugin/pom.xml 制作 ark plugin, 将 tomcat 下沉

好的,thx

另外jarslink 无法切换的问题,打个新包出来吧...

已经上传了. 你更新下吧。

primary commented 5 years ago

参考该 Sample. https://github.com/QilongZhang/jarslink-demo/tree/master/multi-web-app-sample 关键在 https://github.com/QilongZhang/jarslink-demo/blob/master/multi-web-app-sample/spring-plugin/pom.xml 制作 ark plugin, 将 tomcat 下沉

好的,thx 另外jarslink 无法切换的问题,打个新包出来吧...

已经上传了. 你更新下吧。

👍 验证ok