場景:
Spring Boot
內建
Dubbo 3
并使用
Zookeeper
作為注冊中心內建,啟動的時候直接報錯:
java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory
at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:70) ~[dubbo-3.0.0.jar:3.0.0]
at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.createZookeeperClient(CuratorZookeeperTransporter.java:26) ~[dubbo-3.0.0.jar:3.0.0]
at org.apache.dubbo.remoting.zookeeper.support.AbstractZookeeperTransporter.connect(AbstractZookeeperTransporter.java:71) ~[dubbo-3.0.0.jar:3.0.0]
at org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive.connect(ZookeeperTransporter$Adaptive.java) ~[dubbo-3.0.0.jar:3.0.0]
at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration.<init>(ZookeeperDynamicConfiguration.java:68) ~[dubbo-3.0.0.jar:3.0.0]
....
後來檢查了下依賴,主要原因是
dubbo-spring-boot-starter
依賴中不包含通路
Zookeeper
所需的依賴,是以報錯,加入
Dubbo
提供的
Zookeeper
依賴即可,版本号根據項目實際使用更改,保持相容性(
推薦
)。
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-registry-zookeeper -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
推薦使用
dubbo
提供的
Zookeeper
依賴,當然也可以通過下面的依賴(
不推薦
)。
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.8.0</version>
</dependency>
【注】
Dubbo
支援
zkclient
和
curator
兩種
Zookeeper
用戶端實作:在
2.7.x
的版本中已經移除了
zkclient
的實作,預設使用的是
curator
用戶端,是以也需要
curator
的依賴,不然也會報錯。如果要使用
zkclient
用戶端,需要自己去擴充。
更多關于注冊中心的擴充依賴參考:https://github.com/apache/dubbo/tree/3.0/dubbo-registry
個人部落格:Roc’s Blog