最近用Dubbo出现了一个极其诡异的问题,且听我慢慢道来:

首先在spring配置文件里写了如下的配置,看起来没啥子问题:

 

<dubbo:application name="dubbo_consumer"></dubbo:application>
<dubbo:registry check="false" address="${zookeeper_address}" subscribe="false" register="" port="20880">

</dubbo:registry>
<dubbo:reference interface="com.netease.auto.financeplatform.service.GenService"
             timeout="20000"/>


zookeeper_address=zookeeper://127.0.0.1:2181 

结果发现没有在zookeeper里注册成功,把com.alibaba.dubbo的日志级别设成DEBUG级别的,还是没有找出问题来,而且本地测试,关服务器,还会报如下错误:


信息: Illegal access: this web application instance has been stopped already.  Could not load com.alibaba.dubbo.common.utils.NetUtils.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.

java.lang.IllegalStateException

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1745)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)

at com.alibaba.dubbo.common.logger.support.FailsafeLogger.appendContextMessage(FailsafeLogger.java:39)

at com.alibaba.dubbo.common.logger.support.FailsafeLogger.info(FailsafeLogger.java:93)

at com.alibaba.dubbo.config.AbstractConfig$1.run(AbstractConfig.java:450)

at java.lang.Thread.run(Thread.java:745)

Exception in thread "DubboShutdownHook" java.lang.NoClassDefFoundError: com/alibaba/dubbo/registry/support/AbstractRegistryFactory

at com.alibaba.dubbo.config.ProtocolConfig.destroyAll(ProtocolConfig.java:429)

at com.alibaba.dubbo.config.AbstractConfig$1.run(AbstractConfig.java:452)

at java.lang.Thread.run(Thread.java:662)

Caused by: java.lang.ClassNotFoundException: com.alibaba.dubbo.registry.support.AbstractRegistryFactory

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)

... 3 more


真真是崩溃极了。后来才知道上面是没有dubbo服务关闭的错误。

最后把配置改成 如下,才成功。


<dubbo:application name="dubbo_provider"></dubbo:application>
<dubbo:registry check="false" address="${zookeeper_address}" subscribe="false" register=""/>
<dubbo:service interface="com.netease.financeplatform.service.GenService"
                    ref="genService" />


齐刷刷的输出了DUBBO信息


 INFO [RMI TCP Connection(3)-127.0.0.1] (ServiceBean.java:107) 2016-12-06 14:21:16,266 -  [DUBBO] The service ready on spring started. service: com.netease.auto.financeplatform.service.GenService, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (ServiceConfig.java:510) 2016-12-06 14:21:16,352 -  [DUBBO] Export dubbo service GenService to local registry, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (ServiceConfig.java:470) 2016-12-06 14:21:16,352 -  [DUBBO] Export dubbo service GenService to url dubbo://10.234.16.29:20880/GenService?anyhost=true&application=dubbo_provider&dubbo=2.5.3&interface=GenService&methods=genHtml&pid=4596&side=provider&timestamp=1481005276282, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (ServiceConfig.java:481) 2016-12-06 14:21:16,353 -  [DUBBO] Register dubbo service GenService url dubbo://10.234.16.29:20880/com.netease.financeplatform.service.GenService?anyhost=true&application=dubbo_provider&dubbo=2.5.3&interface=GenService&methods=genHtml&pid=4596&side=provider&timestamp=1481005276282 to registry registry://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?application=dubbo_provider&check=false&dubbo=2.5.3&pid=4596&registry=zookeeper&subscribe=false&timestamp=1481005276272, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (AbstractServer.java:69) 2016-12-06 14:21:16,471 -  [DUBBO] Start NettyServer bind /0.0.0.0:20880, export /10.234.16.29:20880, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (AbstractRegistry.java:232) 2016-12-06 14:21:16,499 -  [DUBBO] Load registry store file C:\Users\*\.dubbo\dubbo-registry-127.0.0.1.cache, data: {com.netease.auto.financeplatform.service.GenService=empty://10.234.16.29:20880/GenService?anyhost=true&application=dubbo_consumer&category=configurators&check=false&dubbo=2.5.3&interface=GenService&methods=genHtml&

pid=9492&side=provider&timestamp=1481004535060}, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [ZkClient-EventThread-49-127.0.0.1:2181] (ZkEventThread.java:64) 2016-12-06 14:21:16,521 - Starting ZkClient event thread.

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,521 - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,522 - Client environment:host.name=BIH-D-4137.netease.internal

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,522 - Client environment:java.version=1.7.0_67

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,522 - Client environment:java.vendor=Oracle Corporation

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,522 - Client environment:java.home=D:\Java\jdk1.7.0_67\jre

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,522 - Client environment:java.class.path=E:\apache-tomcat-7.0.65\bin\bootstrap.jar;E:\apache-tomcat-7.0.65\bin\tomcat-juli.jar

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,522 - Client environment:java.library.path=

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,523 - Client environment:java.io.tmpdir=E:\apache-tomcat-7.0.65\temp

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,523 - Client environment:java.compiler=<NA>

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,523 - Client environment:os.name=Windows 7

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,523 - Client environment:os.arch=amd64

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,523 - Client environment:os.version=6.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,523 - Client environment:user.name=*

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,524 - Client environment:user.home=C:\Users\*

 INFO [RMI TCP Connection(3)-127.0.0.1] (Environment.java:100) 2016-12-06 14:21:16,524 - Client environment:user.dir=E:\apache-tomcat-7.0.65\bin

 INFO [RMI TCP Connection(3)-127.0.0.1] (ZooKeeper.java:438) 2016-12-06 14:21:16,525 - Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.I0Itec.zkclient.ZkClient@2acaef76

 INFO [RMI TCP Connection(127.0.0.1:2181)] (ClientCnxn.java:975) 2016-12-06 14:21:16,544 - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)

 INFO [RMI TCP Connection(127.0.0.1:2181)] (ClientCnxn.java:852) 2016-12-06 14:21:16,545 - Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session

十二月 06, 2016 2:21:17 下午 org.apache.catalina.startup.HostConfig deployDirectory

信息: Deploying web application directory E:\apache-tomcat-7.0.65\webapps\manager

十二月 06, 2016 2:21:17 下午 org.apache.catalina.startup.HostConfig deployDirectory

信息: Deployment of web application directory E:\apache-tomcat-7.0.65\webapps\manager has finished in 60 ms

 INFO [RMI TCP Connection(127.0.0.1:2181)] (ClientCnxn.java:1235) 2016-12-06 14:21:18,035 - Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x158d2bafd400005, negotiated timeout = 30000

 INFO [RMI TCP Connection(3)-127.0.0.1-EventThread] (ZkClient.java:449) 2016-12-06 14:21:18,037 - zookeeper state changed (SyncConnected)

 INFO [RMI TCP Connection(3)-127.0.0.1] (AbstractRegistry.java:302) 2016-12-06 14:21:18,038 -  [DUBBO] Register: dubbo://10.234.16.29:20880/GenService?anyhost=true&application=dubbo_provider&dubbo=2.5.3&interface=GenService&methods=genHtml&pid=4596&side=provider&timestamp=1481005276282, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (AbstractRegistry.java:325) 2016-12-06 14:21:19,917 -  [DUBBO] Subscribe: provider://10.234.16.29:20880/com.netease.financeplatform.service.GenService?anyhost=true&application=dubbo_provider&category=configurators&check=false&dubbo=2.5.3&interface=GenService&methods=genHtml

&pid=4596&side=provider&timestamp=1481005276282, dubbo version: 2.5.3, current host: 127.0.0.1

 INFO [RMI TCP Connection(3)-127.0.0.1] (AbstractRegistry.java:422) 2016-12-06 14:21:22,019 -  [DUBBO] Notify urls for subscribe url provider://10.234.16.29:20880/com.netease.financeplatform.service.GenService?anyhost=true&application=dubbo_provider&category=configurators&check=false&dubbo=2.5.3&interface=GenService&

methods=genHtml&pid=4596&side=provider&timestamp=1481005276282, urls: [empty://10.234.16.29:20880/GenService?anyhost=true&application=dubbo_provider&category=configurators&check=false&dubbo=2.5.3&interface=GenService&methods=genHtml&

pid=4596&side=provider&timestamp=1481005276282], dubbo version: 2.5.3, current host: 127.0.0.1


想了半天,终于想通了<dubbo:reference/> 和<dubbo:service/>是不同的,后者才是在zookeeper中注册服务,而<dubbo:reference/>只是从服务中心得到对应的接口

我恨!