天天看點

Spring Boot 使用 Dubbo 3 報錯: org/apache/curator/framework/CuratorFrameworkFactory

場景:

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