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

Dubbo 入門實戰:基於 Zookeeper 註冊中心的服務發布與消費完整示例

     編輯:Java 綜合教學

一、環境準備

Maven 依賴

<!-- Dubbo 核心 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.0.13</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- Zookeeper 客戶端 -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.3.6</version>
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

前置條件

  • 安裝並啟動 Zookeeper(單機/集群),默認端口 2181
  • 確保網絡互通(防火牆/安全組放行 2181、20880 等端口)

二、服務接口與實現

// 接口
package cn.tomcat.quickstart.dubbo.service;
import java.util.List;

public interface DubboService {
    String sayHello(String name);
    List getUsers();
}

// 實現
package cn.tomcat.quickstart.dubbo.service.impl;
import java.util.ArrayList;
import java.util.List;
import cn.tomcat.quickstart.dubbo.service.DubboService;
import cn.tomcat.quickstart.user.model.User;

public class DubboServiceImpl implements DubboService {
    public String sayHello(String name) {
        return "say hello:" + name;
    }
    public List getUsers() {
        List list = new ArrayList();
        User u1 = new User(); u1.setUserName("jack");
        User u2 = new User(); u2.setUserName("tom");
        User u3 = new User(); u3.setUserName("ccc");
        list.add(u1); list.add(u2); list.add(u3);
        return list;
    }
}

三、配置文件

提供者配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="https://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
                           https://code.alibabatech.com/schema/dubbo https://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="dubbo-qucikstart" />
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:service ref="dubboService" interface="cn.tomcat.quickstart.dubbo.service.DubboService" />
    <bean id="dubboService" class="cn.tomcat.quickstart.dubbo.service.impl.DubboServiceImpl" />
</beans>

消費者配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="https://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
                           https://code.alibabatech.com/schema/dubbo https://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="consumer-dubbo-qucikstart" />
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:reference interface="cn.tomcat.quickstart.dubbo.service.DubboService" id="demoService" />
</beans>

四、啟動測試類

提供者啟動

package cn.tomcat.quickstart.dubbo;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;

public class ProviderTest {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = 
            new ClassPathXmlApplicationContext("classpath:dubbo-provider.xml");
        context.start();
        System.in.read(); // 阻塞主線程,保持服務運行
    }
}

消費者調用

package cn.tomcat.quickstart.dubbo;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.tomcat.quickstart.dubbo.service.DubboService;
import java.io.IOException;

public class ConsumerTest {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = 
            new ClassPathXmlApplicationContext("classpath:dubbo-consumer.xml");
        context.start();
        
        DubboService service = (DubboService) context.getBean("demoService");
        System.out.println(service.sayHello("Dubbo"));
        System.out.println(service.getUsers());
        
        System.in.read();
    }
}

五、啟動順序與驗證

  1. 啟動 Zookeeper
  2. 運行 ProviderTest → 控制台無報錯,Zookeeper 節點 /dubbo/.../providers 出現提供者信息
  3. 運行 ConsumerTest → 控制台輸出調用結果,Zookeeper 節點 /dubbo/.../consumers 出現消費者信息
  4. Dubbo Admin 控制台(若部署)可視化查看服務治理信息

六、關鍵配置解析

配置項作用建議
dubbo:protocol通信協議/端口,dubbo 協議高性能二進制生產環境固定端口避免衝突
dubbo:registry註冊中心地址,支援 zookeeper/redis/nacos 等生產用集群模式,配置備選地址
dubbo:service暴露服務,ref 指向實現 Bean可配置 version/group/timeout/retries 等治理參數
dubbo:reference引用服務,生成代理 Beanid 作為 Spring Bean 名稱注入使用

七、進階學習方向

  • 服務治理:負載均衡策略、熔斷降級、服務路由、權重配置
  • 序列化優化:Hessian2/Kryo/FST 替代默認 Java 序列化
  • 集群容錯:Failover/Failfast/Failsafe/Forking/Cluster 模式
  • 監控運維:Dubbo Admin、Metrics 指標、鏈路追蹤整合
  • 遷移升級:Dubbo 2.7+/3.x 新特性、Spring Boot 整合、註解驅動配置

注意:示例版本為 Dubbo 2.0.x(較老),生產環境強烈建議使用 Dubbo 2.7+ 或 3.x,配合 Spring Boot Starter,採用註解式配置(@DubboService/@DubboReference),體驗更佳。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved