SpringBoot项目整合Zookeeper常见错误总结

❃博主首页 :
「程序员1970」
,同名公众号「程序员1970」

☠博主专栏 :
<mysql高手>
<elasticsearch高手>
<源码解读>
<java核心>
<面试攻关>

文章目录

    • 一、依赖配置问题
      • 1. 依赖缺失或版本不匹配
      • 2. Dubbo与Zookeeper整合依赖错误
    • 二、配置问题
      • 1. Zookeeper连接地址配置错误
      • 2. Zookeeper配置文件错误
      • 3. Zookeeper端口冲突
    • 三、启动失败问题
      • 1. Zookeeper服务未启动
      • 2. 连接超时问题
      • 3. 数据目录权限问题
    • 四、运行时常见错误
      • 1. 服务注册失败
      • 2. Dubbo服务注册失败
      • 3. 循环依赖问题
      • 4. Zookeeper客户端连接失败
    • 五、Zookeeper启动问题
      • 1. Zookeeper启动失败
      • 2. Zookeeper端口配置错误
    • 解决方案总结
    • 最佳实践建议

一、依赖配置问题

1. 依赖缺失或版本不匹配

报错内容

java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy
java.lang.NoClassDefFoundError: org/apache/zookeeper/Watcher
java.lang.NoClassDefFoundError: org/apache/curator/utils/DefaultZookeeperFactory
java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory

原因

  • 未添加正确的Zookeeper和Curator依赖
  • 依赖版本不兼容

解决方案

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.6.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. Dubbo与Zookeeper整合依赖错误

报错内容

@DubboReference dependencies is failed

原因

  • 未添加Dubbo相关依赖
  • 未在启动类添加@EnableDubbo注解

解决方案

@SpringBootApplication
@EnableDubbo
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

二、配置问题

1. Zookeeper连接地址配置错误

报错内容

Caused by: java.lang.IllegalStateException: failed to connect to zookeeper server

原因

  • spring.cloud.zookeeper.connect-string配置错误
  • Zookeeper服务未启动

解决方案

spring:
  cloud:
    zookeeper:
      connect-string: 192.168.1.100:2181

2. Zookeeper配置文件错误

报错内容

Invalid arguments, exiting abnormally
java.lang.NumberFormatException: For input string: "D:\MyDevPrograms\Zookeeper\apache-zookeeper-3.8.4-bin\bin\..\conf\zoo.cfg"

原因

  • Zookeeper配置文件(zoo.cfg)配置错误
  • 数据目录(dataDir)路径设置不正确

解决方案

  1. 确保zoo.cfg中dataDir路径存在
  2. 创建数据目录并设置权限:
mkdir -p /data/zookeeper
chmod +w /data/zookeeper

3. Zookeeper端口冲突

报错内容

Error contacting service. It is probably not running.

原因

  • Zookeeper默认端口2181被占用

解决方案

  1. 检查端口占用:
netstat -tuln | grep :2181
  1. 修改zoo.cfg中的clientPort:
clientPort=2182

三、启动失败问题

1. Zookeeper服务未启动

报错内容

Connection refused: no further information

原因

  • Zookeeper服务未启动

解决方案

  1. 启动Zookeeper服务:
bin/zkServer.sh start

2. 连接超时问题

报错内容

Caused by: java.lang.IllegalStateException: failed to connect to zookeeper server

原因

  • Zookeeper连接超时

解决方案

spring:
  cloud:
    zookeeper:
      connect-string: 192.168.1.100:2181
      connection-timeout: 10000

3. 数据目录权限问题

报错内容

Error: Cannot create data directory /data/zookeeper

原因

  • Zookeeper数据目录权限不足

解决方案

chmod -R 755 /data/zookeeper

四、运行时常见错误

1. 服务注册失败

报错内容

Error contacting service. It is probably not running.

原因

  • Zookeeper服务未启动或网络问题
  • 服务名配置错误

解决方案

  1. 确认Zookeeper服务已启动
  2. 检查服务名与注册名一致

2. Dubbo服务注册失败

报错内容

Caused by: org.apache.dubbo.registry.zookeeper.util.CuratorFrameworkUtils.buildCuratorFramework

原因

  • Dubbo与Zookeeper连接问题
  • 连接超时

解决方案

dubbo:
  registry:
    address: zookeeper://192.168.1.100:2181
    timeout: 60000

3. 循环依赖问题

报错内容

Error contacting service. It is probably not running.

原因

  • Dubbo消费者与提供者之间存在循环依赖

解决方案

  1. 调整服务间的依赖关系
  2. 使用接口抽象降低耦合度
  3. 考虑使用延迟加载

4. Zookeeper客户端连接失败

报错内容

org.apache.zookeeper.KeeperException$ConnectionLossException:
KeeperErrorCode = ConnectionLoss for /path

原因

  • 网络不稳定
  • Zookeeper服务器过载

解决方案

  1. 增加连接超时时间
  2. 检查网络稳定性
  3. 优化Zookeeper服务器性能

五、Zookeeper启动问题

1. Zookeeper启动失败

报错内容

Starting Zookeeper ...............FAILED TO START

原因

  • Zookeeper配置文件错误
  • 数据目录不存在
  • 端口被占用

解决方案

  1. 检查zoo.cfg配置
  2. 创建数据目录
  3. 检查端口占用

2. Zookeeper端口配置错误

报错内容

ZooKeeper server is not running on port 2181

原因

  • Zookeeper配置文件中clientPort配置错误

解决方案
修改zoo.cfg文件中的clientPort:

clientPort=2181

解决方案总结

问题类型 报错内容 解决方案
依赖缺失 NoClassDefFoundError 添加正确的Zookeeper和Curator依赖
配置错误 failed to connect to zookeeper server 检查连接地址和配置文件
端口冲突 Error contacting service. It is probably not running 检查端口占用,修改clientPort
服务注册失败 Connection refused 确认Zookeeper服务已启动
连接超时 failed to connect to zookeeper server 增加连接超时时间
数据目录权限 Cannot create data directory 创建目录并设置权限
Dubbo整合问题 @DubboReference dependencies is failed 添加@EnableDubbo注解和正确依赖
循环依赖 Error contacting service. It is probably not running 调整服务依赖关系

最佳实践建议

  1. 版本匹配

    • Zookeeper 3.6.1 + Curator 4.0.1 + Spring Cloud Alibaba 2.2.6.RELEASE
  2. 配置检查

    spring:
      cloud:
        zookeeper:
          connect-string: 192.168.1.100:2181
          connection-timeout: 10000
    
  3. Zookeeper启动

    • 确保dataDir目录存在
    • 确保端口2181未被占用
    • 确保Java环境配置正确
  4. 依赖管理

    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.6.1</version>
    </dependency>
    
  5. 错误排查

    • 检查Zookeeper日志(logs目录)
    • 确认Zookeeper服务状态
    • 验证连接地址和端口

关注公众号获取更多技术干货 !

SpringBoot项目整合Zookeeper常见错误总结

© 版权声明

相关文章