PowerJob / PowerJob

Enterprise job scheduling middleware with distributed computing ability.
http://www.powerjob.tech/
Apache License 2.0
6.89k stars 1.2k forks source link

springboot 2.6.3 worker无法注册 #667

Open zizihrhr335500 opened 1 year ago

zizihrhr335500 commented 1 year ago

622

https://github.com/PowerJob/PowerJob/issues/622 已经按照文档方式使用非 boot-starter方式启动worker。没有任何报错, t.p.w.background.WorkerHealthReporter [WorkerHealthReporter] report health status,appId:3,appName:yhr-test,isOverload:false,maxLightweightTaskNum:1024,currentLightweightTaskNum:0,maxHeavyweightTaskNum:64,currentHeavyweightTaskNum:0 日志显示正常。但是server端就是读取不到worker。 阅读源码后修改一段代码添加了日志打印: tech.powerjob.worker.common.utils.TransportUtils类 public static void reportWorkerHeartbeat(WorkerHeartbeat req, String address, Transporter transporter) { final URL url = easyBuildUrl(ServerType.SERVER, S4W_PATH, S4W_HANDLER_WORKER_HEARTBEAT, address); transporter.ask(url, req, null).whenComplete((result, throwable) -> { if (throwable != null) { log.error("reportWorkerHeartbeat error", throwable); } }); } 发现两个报错启动时先是 java.lang.NoSuchFieldError: ACCESS_CONTROL_ALLOW_PRIVATE_NETWORK at io.vertx.core.http.HttpHeaders.<clinit>(HttpHeaders.java:106) at io.vertx.core.http.impl.HttpChannelConnector.applyHttp1xConnectionOptions(HttpChannelConnector.java:171) at io.vertx.core.http.impl.HttpChannelConnector.wrap(HttpChannelConnector.java:135) at io.vertx.core.http.impl.HttpChannelConnector.lambda$httpConnect$0(HttpChannelConnector.java:144) at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:38) at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) at io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23) at io.vertx.core.Promise.complete(Promise.java:66) at io.vertx.core.net.impl.NetClientImpl.lambda$connected$8(NetClientImpl.java:311) at io.vertx.core.net.impl.VertxHandler.setConnection(VertxHandler.java:82) at io.vertx.core.net.impl.VertxHandler.handlerAdded(VertxHandler.java:88) at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938) at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609) at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:223) at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:195) at io.vertx.core.net.impl.NetClientImpl.connected(NetClientImpl.java:313) 启动时出现第一个这个报错后以一直继续出现另一种错误 java.lang.NoClassDefFoundError: Could not initialize class io.vertx.core.http.HttpHeaders at io.vertx.core.http.impl.HttpChannelConnector.applyHttp1xConnectionOptions(HttpChannelConnector.java:171) at io.vertx.core.http.impl.HttpChannelConnector.wrap(HttpChannelConnector.java:135) at io.vertx.core.http.impl.HttpChannelConnector.lambda$httpConnect$0(HttpChannelConnector.java:144) at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:38) at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211) at io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23)

这是什么问题,如何解决?

KFCFans commented 1 year ago

看起来是 vertx 版本冲突导致的,可以尝试更换通讯协议为 akka

brandies-debug commented 1 year ago

springboot v2.4.6 协议http 启动 java.lang.NoClassDefFoundError: io/netty/handler/codec/compression/StandardCompressionOptions at tech.powerjob.remote.http.vertx.VertxInitializer.tryEnableCompression(VertxInitializer.java:53) ~[powerjob-remote-impl-http-4.3.3.jar:4.3.3] at tech.powerjob.remote.http.vertx.VertxInitializer.buildHttpServer(VertxInitializer.java:45) ~[powerjob-remote-impl-http-4.3.3.jar:4.3.3] at tech.powerjob.remote.http.HttpVertxCSInitializer.init(HttpVertxCSInitializer.java:62) ~[powerjob-remote-impl-http-4.3.3.jar:4.3.3] at tech.powerjob.remote.framework.engine.impl.PowerJobRemoteEngine.start(PowerJobRemoteEngine.java:42) ~[powerjob-remote-framework-4.3.3.jar:4.3.3] at tech.powerjob.worker.PowerJobWorker.init(PowerJobWorker.java:106) ~[powerjob-worker-4.3.3.jar:4.3.3] at tech.powerjob.worker.PowerJobSpringWorker.afterPropertiesSet(PowerJobSpringWorker.java:40) ~[powerjob-worker-4.3.3.jar:4.3.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) [spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) [spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) [spring-beans-5.3.7.jar:5.3.7] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) [spring-beans-5.3.7.jar:5.3.7] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) [spring-context-5.3.7.jar:5.3.7] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) [spring-context-5.3.7.jar:5.3.7] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) [spring-boot-2.4.6.jar:2.4.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) [spring-boot-2.4.6.jar:2.4.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) [spring-boot-2.4.6.jar:2.4.6] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) [spring-boot-2.4.6.jar:2.4.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) [spring-boot-2.4.6.jar:2.4.6] at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:144) [spring-boot-2.4.6.jar:2.4.6] at camc.meteor_manager.Application.start(Application.java:28) [classes/:?] at camc.meteor_manager.Application.start(Application.java:23) [classes/:?] at camc.meteor_manager.Application.main(Application.java:19) [classes/:?] Caused by: java.lang.ClassNotFoundException: io.netty.handler.codec.compression.StandardCompressionOptions at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[?:?] at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?] ... 26 more

请问有解决办法吗?

dudiao commented 7 months ago

@zizihrhr335500 项目中使用 Spring Boot parent 或者 dependencies 进行依赖管理时,Spring Boot 中指定了netty的版本,有可能会和 vertx 依赖的 netty 冲突(特别是在 Spring Boot 的低版本中),可以在 pom.xml 文件 properties中,指定 netty 的版本,如下:

<properties>
    <netty.version>4.1.86.Final</netty.version>

    ...
</properties>
image