今天升級spring版本的時候,同時升級dubbo的版本,采用的是dubbo的基於注解的配置方法,采用curator作為dubbo的客戶端,
curator版本為4.1.0,啟動之后,發現一直報錯 ConnectionLoss for /dubbo/xxx, 通過debug調試源碼發現兩個問題:
1. 連接服務端經常返回 KeeperNode Not found的現象,即dubbo節點找不到,但是通過dubbo admin是可以看到節點注冊成功的
2. Zookeeper客戶端對於連接失敗的接口,一直不斷重連,Zookeeper實例連接正常
通過Zookeeper服務端日志發現有warn日志:Received at server of unknown type 15
通過推斷可以知道,由於客戶端版本過新,Zookeeper服務端部分特性不支持,導致客戶端的找不到節點和不斷重連
解決方案:修改pom.xml文件如下:
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.1.0</version> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.13</version> </dependency>
這樣解決了引入高版本的curator客戶端,由繼續使用了Zookeeper的跟服務器兼容的客戶端版本。
curator和Zookeeper的搭配參考: http://curator.apache.org/zk-compatibility.html