首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Dubbo 整合 Zookeeper 與 Spring MVC 完整實戰:負載均衡、容錯、服務治理

     編輯:Java 綜合教學

Dubbo 整合 Zookeeper 與 Spring MVC 完整實戰:負載均衡、容錯、服務治理

隨著業務增長,單體應用演進為分布式微服務架構,Dubbo 作為核心 RPC 框架,配合 Zookeeper 註冊中心實現服務動態發現、負載均衡、容錯降級。本文詳述 Linux 環境下 Zookeeper 部署、Dubbo Admin 管理控制台、Spring MVC 整合 Dubbo 服務發布與消費全流程。

背景痛點

  1. 服務 URL 硬編碼,維護困難,F5 硬負載單點壓力大。
  2. 服務依賴關系複雜,啟動順序難控制,架構圖難維護。
  3. 容量規劃無數據支撐,擴容盲目。

Dubbo 通過註冊中心、軟負載、監控中心解決上述問題。

Dubbo 架構圖解

Dubbo 架構演進

Dubbo 節點角色與調用關系

Dubbo 協議實現類

Linux 部署 Zookeeper (單機)

# 1. 下載解壓
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg

# 2. 修改 zoo.cfg 關鍵配置
tickTime=2000
dataDir=/data/zookeeper
clientPort=2181
# maxClientCnxns=60

# 3. 啟動
cd ../bin
./zkServer.sh start
# 驗證
./zkCli.sh -server 127.0.0.1:2181

部署 Dubbo Admin 管理控制台

# 1. 下載 dubbo-admin-2.4.1.war 放入 Tomcat webapps/ROOT
# 2. 解壓 jar -xvf dubbo-admin-2.4.1.war
# 3. 編輯 WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
# 4. 啟動 Tomcat,訪問 https://ip:port/ 登錄

Dubbo Admin 登錄頁

Spring MVC 整合 Dubbo (Maven 多模塊)

模塊劃分

  • test-maven-api:服務接口 TestRegistryService。
  • test-maven-console:Provider,實現接口,發布服務。
  • test-maven-server-console:Consumer,Spring MVC Web,引用服務。

Provider 關鍵配置

<dubbo:application name="dubbo_provider" />
<dubbo:registry address="zookeeper://127.0.0.1:2181" check="false" subscribe="false" />
<dubbo:service interface="cn.test.dubbo.registry.service.TestRegistryService" ref="testRegistryService" />

屬性說明:check="false" 允許註冊中心啟動前啟動 Provider;subscribe="false" 僅註冊不訂閱。

Consumer 關鍵配置

<dubbo:application name="dubbo_consumer" />
<dubbo:registry address="zookeeper://192.168.74.129:2181" check="false" />
<dubbo:reference interface="cn.test.dubbo.registry.service.TestRegistryService" id="testRegistryService" />

Controller 中直接 @Autowired TestRegistryService 像本地 Bean 一樣調用。

負載均衡策略

策略配置值特點
隨機random默認,按權重隨機,調用量大時分布均勻
輪詢roundrobin按權重輪詢,存在慢提供者累積請求問題
最少活躍leastactive優先調用空閒提供者,適合異步/長連接
一致性哈希consistenthash相同參數路由到同一提供者,適合有狀態服務
<dubbo:reference ... loadbalance="leastactive" />

容錯策略 (Cluster)

策略配置值行為
失敗自動切換failover默認,重試其他提供者,適合冪等操作
快速失敗failfast僅調用一次,失敗即拋異常,適合非冪等寫操作
失敗安全failsafe異常打印日誌不拋出,適合非關鍵寫操作 (如日誌記錄)
失敗自動恢復failback失敗記錄本地定時重試,適合消息通知
並行調用forking並行調用多個提供者,只要一個成功即返回,高併發慎用
廣播調用broadcast逐個調用所有提供者,任一失敗則報錯,適合通知類
<dubbo:service ... cluster="failover" retries="2" timeout="3000" />

驗證效果

  1. Provider 啟動 → Admin 控制台顯示提供者在線。
  2. Consumer 啟動 → 控制台顯示消費者在線,依賴關系建立。
  3. 瀏覽器調用 Controller → 遠程服務執行,返回結果。
  4. 關閉一個 Provider → Consumer 自動切換到另一個 (failover)。

Provider 註冊成功

Consumer 註冊成功

Controller 調用成功

生產化建議

  • Zookeeper 集群 (3/5 節點),zoo.cfg 配置 server.1=ip:2888:3888。
  • 服務分組 group、版本 version 隔離,灰度發布。
  • 啟用 dubbo-monitor + Grafana 監控 QPS、RT、錯誤率。
  • 配置服務路由、標籤路由、條件路由實現藍綠部署、金絲雀發布。
  • 整合 Sentinel/Hystrix 實現熔斷限流降級。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved