SpringBoot項(xiàng)目整合Zookeeper常見(jiàn)錯(cuò)誤總結(jié)
一、依賴(lài)配置問(wèn)題
1. 依賴(lài)缺失或版本不匹配
報(bào)錯(cuò)內(nèi)容:
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依賴(lài)
- 依賴(lài)版本不兼容
解決方案:
<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整合依賴(lài)錯(cuò)誤
報(bào)錯(cuò)內(nèi)容:
@DubboReference dependencies is failed
原因:
- 未添加Dubbo相關(guān)依賴(lài)
- 未在啟動(dòng)類(lèi)添加
@EnableDubbo注解
解決方案:
@SpringBootApplication
@EnableDubbo
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
二、配置問(wèn)題
1. Zookeeper連接地址配置錯(cuò)誤
報(bào)錯(cuò)內(nèi)容:
Caused by: java.lang.IllegalStateException: failed to connect to zookeeper server
原因:
spring.cloud.zookeeper.connect-string配置錯(cuò)誤- Zookeeper服務(wù)未啟動(dòng)
解決方案:
spring:
cloud:
zookeeper:
connect-string: 192.168.1.100:2181
2. Zookeeper配置文件錯(cuò)誤
報(bào)錯(cuò)內(nèi)容:
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)配置錯(cuò)誤
- 數(shù)據(jù)目錄(dataDir)路徑設(shè)置不正確
解決方案:
- 確保zoo.cfg中dataDir路徑存在
- 創(chuàng)建數(shù)據(jù)目錄并設(shè)置權(quán)限:
mkdir -p /data/zookeeper chmod +w /data/zookeeper
3. Zookeeper端口沖突
報(bào)錯(cuò)內(nèi)容:
Error contacting service. It is probably not running.
原因:
- Zookeeper默認(rèn)端口2181被占用
解決方案:
- 檢查端口占用:
netstat -tuln | grep :2181
- 修改zoo.cfg中的clientPort:
clientPort=2182
三、啟動(dòng)失敗問(wèn)題
1. Zookeeper服務(wù)未啟動(dòng)
報(bào)錯(cuò)內(nèi)容:
Connection refused: no further information
原因:
- Zookeeper服務(wù)未啟動(dòng)
解決方案:
- 啟動(dòng)Zookeeper服務(wù):
bin/zkServer.sh start
2. 連接超時(shí)問(wèn)題
報(bào)錯(cuò)內(nèi)容:
Caused by: java.lang.IllegalStateException: failed to connect to zookeeper server
原因:
- Zookeeper連接超時(shí)
解決方案:
spring:
cloud:
zookeeper:
connect-string: 192.168.1.100:2181
connection-timeout: 100003. 數(shù)據(jù)目錄權(quán)限問(wèn)題
報(bào)錯(cuò)內(nèi)容:
Error: Cannot create data directory /data/zookeeper
原因:
- Zookeeper數(shù)據(jù)目錄權(quán)限不足
解決方案:
chmod -R 755 /data/zookeeper
四、運(yùn)行時(shí)常見(jiàn)錯(cuò)誤
1. 服務(wù)注冊(cè)失敗
報(bào)錯(cuò)內(nèi)容:
Error contacting service. It is probably not running.
原因:
- Zookeeper服務(wù)未啟動(dòng)或網(wǎng)絡(luò)問(wèn)題
- 服務(wù)名配置錯(cuò)誤
解決方案:
- 確認(rèn)Zookeeper服務(wù)已啟動(dòng)
- 檢查服務(wù)名與注冊(cè)名一致
2. Dubbo服務(wù)注冊(cè)失敗
報(bào)錯(cuò)內(nèi)容:
Caused by: org.apache.dubbo.registry.zookeeper.util.CuratorFrameworkUtils.buildCuratorFramework
原因:
- Dubbo與Zookeeper連接問(wèn)題
- 連接超時(shí)
解決方案:
dubbo:
registry:
address: zookeeper://192.168.1.100:2181
timeout: 600003. 循環(huán)依賴(lài)問(wèn)題
報(bào)錯(cuò)內(nèi)容:
Error contacting service. It is probably not running.
原因:
- Dubbo消費(fèi)者與提供者之間存在循環(huán)依賴(lài)
解決方案:
- 調(diào)整服務(wù)間的依賴(lài)關(guān)系
- 使用接口抽象降低耦合度
- 考慮使用延遲加載
4. Zookeeper客戶(hù)端連接失敗
報(bào)錯(cuò)內(nèi)容:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /path
原因:
- 網(wǎng)絡(luò)不穩(wěn)定
- Zookeeper服務(wù)器過(guò)載
解決方案:
- 增加連接超時(shí)時(shí)間
- 檢查網(wǎng)絡(luò)穩(wěn)定性
- 優(yōu)化Zookeeper服務(wù)器性能
五、Zookeeper啟動(dòng)問(wèn)題
1. Zookeeper啟動(dòng)失敗
報(bào)錯(cuò)內(nèi)容:
Starting Zookeeper ...............FAILED TO START
原因:
- Zookeeper配置文件錯(cuò)誤
- 數(shù)據(jù)目錄不存在
- 端口被占用
解決方案:
- 檢查zoo.cfg配置
- 創(chuàng)建數(shù)據(jù)目錄
- 檢查端口占用
2. Zookeeper端口配置錯(cuò)誤
報(bào)錯(cuò)內(nèi)容:
ZooKeeper server is not running on port 2181
原因:
- Zookeeper配置文件中clientPort配置錯(cuò)誤
解決方案:
修改zoo.cfg文件中的clientPort:
clientPort=2181
解決方案總結(jié)
| 問(wèn)題類(lèi)型 | 報(bào)錯(cuò)內(nèi)容 | 解決方案 |
|---|---|---|
| 依賴(lài)缺失 | NoClassDefFoundError | 添加正確的Zookeeper和Curator依賴(lài) |
| 配置錯(cuò)誤 | failed to connect to zookeeper server | 檢查連接地址和配置文件 |
| 端口沖突 | Error contacting service. It is probably not running | 檢查端口占用,修改clientPort |
| 服務(wù)注冊(cè)失敗 | Connection refused | 確認(rèn)Zookeeper服務(wù)已啟動(dòng) |
| 連接超時(shí) | failed to connect to zookeeper server | 增加連接超時(shí)時(shí)間 |
| 數(shù)據(jù)目錄權(quán)限 | Cannot create data directory | 創(chuàng)建目錄并設(shè)置權(quán)限 |
| Dubbo整合問(wèn)題 | @DubboReference dependencies is failed | 添加@EnableDubbo注解和正確依賴(lài) |
| 循環(huán)依賴(lài) | Error contacting service. It is probably not running | 調(diào)整服務(wù)依賴(lài)關(guān)系 |
最佳實(shí)踐建議
- 版本匹配:
- Zookeeper 3.6.1 + Curator 4.0.1 + Spring Cloud Alibaba 2.2.6.RELEASE
- 配置檢查:
spring:
cloud:
zookeeper:
connect-string: 192.168.1.100:2181
connection-timeout: 10000- Zookeeper啟動(dòng):
- 確保dataDir目錄存在
- 確保端口2181未被占用
- 確保Java環(huán)境配置正確
- 依賴(lài)管理:
<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>- 錯(cuò)誤排查:
- 檢查Zookeeper日志(logs目錄)
- 確認(rèn)Zookeeper服務(wù)狀態(tài)
- 驗(yàn)證連接地址和端口
到此這篇關(guān)于SpringBoot項(xiàng)目整合Zookeeper常見(jiàn)錯(cuò)誤總結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目整合Zookeeper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Zookeeper實(shí)現(xiàn)分布式鎖的具體步驟
- SpringBoot+Dubbo+Zookeeper知識(shí)整合過(guò)程詳解
- SpringBoot整合Dubbo+Zookeeper實(shí)現(xiàn)RPC調(diào)用
- SpringBoot整合Zookeeper詳細(xì)教程
- 2020最新IDEA SpringBoot整合Dubbo的實(shí)現(xiàn)(zookeeper版)
- SpringBoot整合Dubbo zookeeper過(guò)程解析
- Springboot 整合 Dubbo/ZooKeeper 實(shí)現(xiàn) SOA 案例解析
相關(guān)文章
MyBatis執(zhí)行批處理操作的實(shí)現(xiàn)示例
在MyBatis中,批處理操作是一種高效執(zhí)行多條語(yǔ)句的方式,下面就來(lái)介紹一下MyBatis執(zhí)行批處理操作的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
MVC+DAO設(shè)計(jì)模式下的設(shè)計(jì)流程詳解
這篇文章主要介紹了MVC+DAO設(shè)計(jì)模式下的設(shè)計(jì)流程詳解,分別介紹了數(shù)據(jù)庫(kù)設(shè)計(jì)、設(shè)計(jì)符合java bean標(biāo)準(zhǔn)的entity類(lèi)、設(shè)計(jì)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的DAO接口等內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
Java實(shí)現(xiàn)時(shí)間與字符串互相轉(zhuǎn)換詳解
這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)時(shí)間與字符串互相轉(zhuǎn)換的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
IDEA編寫(xiě)SpringBoot項(xiàng)目時(shí)使用Lombok報(bào)錯(cuò)“找不到符號(hào)”的原因和解決
本文主要介紹了IDEA編寫(xiě)SpringBoot項(xiàng)目時(shí)使用Lombok報(bào)錯(cuò)“找不到符號(hào)”,詳細(xì)介紹了幾種可能會(huì)出現(xiàn)的問(wèn)題及其解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
詳解通過(guò)JDBC進(jìn)行簡(jiǎn)單的增刪改查(以MySQL為例)
JDBC是用于執(zhí)行SQL語(yǔ)句的一類(lèi)Java API,通過(guò)JDBC使得我們可以直接使用Java編程來(lái)對(duì)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行操作。通過(guò)封裝,可以使開(kāi)發(fā)人員使用純Java API完成SQL的執(zhí)行。2017-01-01
Logger.error打印錯(cuò)誤異常的詳細(xì)堆棧信息
這篇文章主要介紹了Logger.error打印錯(cuò)誤異常的詳細(xì)堆棧信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

