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



# 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
# 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/ 登錄

test-maven-api:服務接口 TestRegistryService。test-maven-console:Provider,實現接口,發布服務。test-maven-server-console:Consumer,Spring MVC Web,引用服務。<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" 僅註冊不訂閱。
<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" />
| 策略 | 配置值 | 行為 |
|---|---|---|
| 失敗自動切換 | failover | 默認,重試其他提供者,適合冪等操作 |
| 快速失敗 | failfast | 僅調用一次,失敗即拋異常,適合非冪等寫操作 |
| 失敗安全 | failsafe | 異常打印日誌不拋出,適合非關鍵寫操作 (如日誌記錄) |
| 失敗自動恢復 | failback | 失敗記錄本地定時重試,適合消息通知 |
| 並行調用 | forking | 並行調用多個提供者,只要一個成功即返回,高併發慎用 |
| 廣播調用 | broadcast | 逐個調用所有提供者,任一失敗則報錯,適合通知類 |
<dubbo:service ... cluster="failover" retries="2" timeout="3000" />



zoo.cfg 配置 server.1=ip:2888:3888。group、版本 version 隔離,灰度發布。dubbo-monitor + Grafana 監控 QPS、RT、錯誤率。