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

Dubbo 分布式服務框架實戰:Zookeeper 註冊中心、服務發布與消費完整指南

     編輯:Java 綜合教學

Dubbo 分布式服務框架實戰:Zookeeper 註冊中心、服務發布與消費完整指南

Apache Dubbo 是高性能、透明化的 RPC 分布式服務框架。本文通過一個 Maven 多模塊項目,演示基於 Zookeeper 註冊中心的服務提供者發布、消費者引用、Spring MVC 整合、負載均衡與容錯配置全流程。

架構角色

  • Provider:暴露服務的提供方。
  • Consumer:調用遠程服務的消費方。
  • Registry:服務註冊與發現中心(本文用 Zookeeper)。
  • Monitor:統計調用次數、耗時的監控中心。
  • Container:服務運行容器(Spring 容器)。

基礎設施準備

  1. Zookeeper 3.4.6:單機模式,配置 zoo.cfg,客戶端端口 2181。啟動 zkServer.sh start。
  2. Dubbo Admin 2.5.3:War 包部署到 Tomcat,配置 dubbo.properties 指向 ZK 地址,提供可視化治理控制台。

項目結構 (Maven 多模塊)

dubbo-demo (父工程)
├── dubbo-demo-common   // 公共模型、工具、基類
├── dubbo-demo-api      // 服務接口定義 (IUserService)
├── dubbo-demo-service  // 服務實現提供者
└── dubbo-demo-web      // 消費者 Web 應用

服務提供者實現

1. 接口定義 (api 模塊)

public interface IUserService {
    List<User> queryAll(Map<String, Object> param) throws Exception;
    void saveUser(Map<String, Object> param) throws Exception;
    void deleteUser(Map<String, Object> param) throws Exception;
}

2. 實現類 + @Service 發布 (service 模塊)

@Service(interfaceClass = IUserService.class) // Dubbo 註解發布
public class UserServiceImpl implements IUserService {
    @Autowired private IUserDao userDao; // Spring 注入 DAO

    @Override public List<User> queryAll(Map<String, Object> param) { return userDao.queryAll(param); }
    @Override public void saveUser(Map<String, Object> param) { userDao.saveUser(param); }
    @Override public void deleteUser(Map<String, Object> param) { userDao.deleteUser(param); }
}

3. Spring + Dubbo 配置 (service 模塊)

<beans xmlns:dubbo="https://code.alibabatech.com/schema/dubbo">
    <dubbo:application name="dubbo-demo-service" />
    <dubbo:registry protocol="zookeeper" address="10.0.10.51:2181" />
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:annotation package="org.dubbo.demo.service" /> <!-- 掃描 @Service -->
</beans>

4. 啟動類

public class StartDubboService {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring.xml");
        context.start();
        synchronized (StartDubboService.class) { while (true) { StartDubboService.class.wait(); } }
    }
}

服務消費者 (Web 模塊)

1. Spring MVC Controller + @Reference 引用

@Controller @RequestMapping("/user")
public class UserController extends BaseController {
    @Reference private IUserService userService; // Dubbo 註解引用

    @RequestMapping("/getUserList")
    @ResponseBody
    public String getUserList(int pageNo, int pageSize) {
        Map<String, Object> param = new HashMap<>();
        param.put("pageNo", pageNo); param.put("pageSize", pageSize);
        List<User> userList = userService.queryAll(param);
        return new Gson().toJson(mapOf("userList", userList));
    }
    // ... deleteUser, saveUserTest
}

2. Dubbo 消費者配置

<beans xmlns:dubbo="https://code.alibabatech.com/schema/dubbo">
    <dubbo:application name="dubbo-demo-web" />
    <dubbo:registry address="zookeeper://10.0.10.51:2181" check="false" />
    <dubbo:reference interface="org.dubbo.demo.api.service.IUserService" id="userService" />
</beans>

負載均衡與容錯策略

在 <dubbo:reference> 或 <dubbo:service> 上配置:

屬性可選值說明
loadbalancerandom(默認)、roundrobin、leastactive、consistenthash隨機、輪詢、最少活躍調用、一致性哈希
clusterfailover(默認)、failfast、failsafe、failback、forking、broadcast失敗自動切換、快速失敗、失敗安全、失敗重試、並行調用、廣播調用
retriesint (默認 2)重試次數(不含首次)
timeoutint (毫秒,默認 1000)調用超時時間
activesint每服務提供者最大並發調用數,防止過載
<dubbo:reference interface="..." id="userService" loadbalance="leastactive" cluster="failover" retries="2" timeout="3000" />

驗證與監控

  1. 啟動 Provider,Dubbo Admin 控制台顯示「提供者: 1」。
  2. 啟動 Consumer Web,控制台顯示「消費者: 1」。
  3. 瀏覽器訪問 https://localhost:8080/dubbo-demo-web/user/getUserList.do?pageNo=0&pageSize=5,返回 JSON 數據。
  4. Dubbo Admin 可查看調用統計、服務治理、路由規則、動態配置。

源碼地址

https://github.com/peterchenhdu/Demos/tree/master/dubbo-demo

生產環境建議

  • Zookeeper 集群模式 (3/5 節點),配置 zoo.cfg 集群參數。
  • Dubbo 協議端口統一規劃,防火牆放行。
  • 服務接口版本號管理 (version="1.0.0"),平滑升級。
  • 啟用 Dubbo 監控中心 (dubbo-monitor) 接入 Grafana/Prometheus。
  • 配置服務降級 (mock="return null")、熔斷 (Sentinel/Hystrix 整合)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved