consumer 端报错
03:29:47,208 ERROR ClientCnxn:422 - from localhost-startStop-1-SendThread(192.168.1.91:2181)
java.lang.NoClassDefFoundError: org/apache/zookeeper/server/ZooTrace
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1196)
Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.ZooTrace
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 1 more
https://issues.apache.org/jira/browse/ZOOKEEPER-2618
3.4.10 版本修复了此 bug ,建议升级下版本。
偶发问题,并非每次必现。
你给的链接我看过了,根据大家的讨论,并不是zookeeper客户端的bug;
而是要通过这两个手段解决:
这或许是dubbo的shutdownhook机制在tomcat等容器环境下工作的机制问题
@DeadLion ZOOKEEPER-2618这个issue就是我提的,不过并没有在3.4.10中修复这个问题,当时讨论的结果是容器停机的问题.
这个异常可以尝试 规避下。
只要在tomcat停止之前,你在项目代码中加上一段(保障能执行,例如 写在ProtocolConfig.destroyAll()代码的位置)或者也可以在启动的地方加一下.
ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
"Run shutdown now.");
不过这个问题个人观点仍然是zk的小问题,ClientCnxn.close退出的时候没有阻塞等待线程执行结束,导致没有优雅释放.
最新的修复记录在这https://issues.apache.org/jira/browse/ZOOKEEPER-1816 这个问题暂时挂住了.
@wuwen5 是的 ,我后来又仔细看了下那个 issue,没有当成问题处理。如果能在 zk 中解决就最好了,不用和外部代码耦合在一块。
@DeadLion 请参见wuwen5提供的链接。优雅停机本身的工作机制,会在后面的版本做优化
consumer 端报错
03:29:47,208 ERROR ClientCnxn:422 - from localhost-startStop-1-SendThread(192.168.1.91:2181) java.lang.NoClassDefFoundError: org/apache/zookeeper/server/ZooTrace at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1196) Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.ZooTrace at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) ... 1 morehttps://issues.apache.org/jira/browse/ZOOKEEPER-2618
3.4.10 版本修复了此 bug ,建议升级下版本。
从异常信息看,ClassNotFoundException: org.apache.zookeeper.server.ZooTrace若发生在应用启动时,应用应该是启动失败;若发生在应用关闭时,就像 @wuwen5 说的,是应用优雅停机问题。我们也遇到不少这个问题,都是发生在应用关闭时,消费者和提供者都升级到dubbo-2.5.8之后就很少遇到。