场景: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