<!-- 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>
2181// 接口
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();
}
}
ProviderTest → 控制台無報錯,Zookeeper 節點 /dubbo/.../providers 出現提供者信息ConsumerTest → 控制台輸出調用結果,Zookeeper 節點 /dubbo/.../consumers 出現消費者信息| 配置項 | 作用 | 建議 |
|---|---|---|
dubbo:protocol | 通信協議/端口,dubbo 協議高性能二進制 | 生產環境固定端口避免衝突 |
dubbo:registry | 註冊中心地址,支援 zookeeper/redis/nacos 等 | 生產用集群模式,配置備選地址 |
dubbo:service | 暴露服務,ref 指向實現 Bean | 可配置 version/group/timeout/retries 等治理參數 |
dubbo:reference | 引用服務,生成代理 Bean | id 作為 Spring Bean 名稱注入使用 |
注意:示例版本為 Dubbo 2.0.x(較老),生產環境強烈建議使用 Dubbo 2.7+ 或 3.x,配合 Spring Boot Starter,採用註解式配置(
@DubboService/@DubboReference),體驗更佳。