本文是参考别的教程自己写例子,仅供参考;
服务器端代码:
DemoService和User为公用代码,放到jar包中,自己创建项目添加代码export JAR,放到项目中即可;
DemoService.java
package demo;
import java.util.List;
public interface DemoService {
String sayHello(String name);
public List<User> getUser();
}
DemoServiceImpl.java
package dubbo.com.cn;
import java.util.ArrayList;
import java.util.List;
import demo.DemoService;
import demo.User;
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "hello " + name;
}
@Override
public List<User> getUser() {
List<User> list = new ArrayList<User>();
for(int i = 1; i< 10 ; i++ ){
User u = new User();
u.setName("tom"+i);
u.setAddress("中关村"+i);
u.setAge(i);
list.add(u);
}
return list;
}
}
User.java
package demo;
import java.io.Serializable;
public class User implements Serializable {
private String name;
private Integer age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
ProviderMain.java 加载配置文件,监听请求
package dubbo.com.cn;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ProviderMain {
public static void main(String[] args) {
try {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
System.out.println(" server is running!");
context.start();
System.in.read();// 为保证服务一直开着,利用输入流的阻塞来模拟
} catch (IOException e) {
e.printStackTrace();
}
}
}
配置文件:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<bean id="demoService" class="dubbo.com.cn.DemoServiceImpl" />
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="xixi_provider" />
<!-- 使用multicast广播注册中心暴露服务地址
<dubbo:registry address="multicast://224.5.6.7:1234" />-->
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181,172.16.10.62:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="demo.DemoService" ref="demoService" />
</beans>
log.properties
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
客户端:
package dubbo.cn.com;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import demo.DemoService;
import demo.User;
public class ConsomerMain {
public static void main(String[] args) {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
context.start();
DemoService service = (DemoService) context.getBean("demoService");
String say = service.sayHello("tom");
System.err.println(" retru result " + say);
List<User> list = service.getUser();
for (User u : list) {
System.out.println(u.getName() + " " + u.getAddress() + " " + u.getAge());
}
}
}
配置文件:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181" /> -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181,172.16.10.62:2181"/>
<!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="demo.DemoService" />
</beans>
log.properties
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
zookeeper下载地址:
zoo_sample.cfg重命名为zoo.cfg
运行bin目录下zkServer.cmd,报错的话编辑zkServer.cmd 在第一行添加jdk路径: