本节我们演示下dubbo项目的搭建,服务端和客户端进行远程通信,通过zookeeper进行注册的实现。
项目结构图
Dubbo-client客户端
Dubbo-host 宿主服务
Dubbo-model实体Model
Dubbo-service服务
Dubbo-service-impl服务实现
项目分为5个模块,客户端使用的时候只需把接口Dubbo-service和Dubbo-model给客户端,进行远程调用model
model层需要实现序列化接口Serializable
package com.dubbo.model;
import java.io.Serializable;
public class ProductModel implements Serializable {
//产品名称
private String name;
//产品编码
private String code;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
dubbo-service
package com.dubbo.service;
import java.util.List;
import com.dubbo.model.ProductModel;
public interface ProductService {
public List<ProductModel> GetAllProcuct();
}
dubbo-service-impl
package com.dubbo.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.dubbo.model.ProductModel;
import com.dubbo.service.ProductService;
public class ProductServiceImpl implements ProductService {
public List<ProductModel> GetAllProcuct() {
// TODO Auto-generated method stub
List<ProductModel> list=new ArrayList<ProductModel>();
ProductModel model1=new ProductModel();
model1.setCode("001");
model1.setName("可口可乐");
list.add(model1);
ProductModel model2=new ProductModel();
model2.setCode("002");
model2.setName("百事可乐");
list.add(model2);
ProductModel model3=new ProductModel();
model3.setCode("003");
model3.setName("非常可乐");
list.add(model3);
return list;
}
}
宿主host
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 -->
<bean id="productService" class="com.dubbo.service.impl.ProductServiceImpl" />
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="provider" />
<dubbo:monitor protocol= "registry" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" />
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181" /> -->
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.dubbo.service.ProductService" ref="productService" />
</beans>
package com.dubbo.host;
import java.io.IOException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
context.start();
System.out.println( "dubbol服务启动" );
try {
System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("关闭服务");
context.close();
}
}
cllient
<?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 protocol="zookeeper" address="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" />
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181" /> -->
<!-- <dubbo:monitor protocol= "registry" /> -->
<dubbo:reference id="productService"
interface="com.dubbo.service.ProductService" />
</beans>
package com.dubbo.client;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dubbo.model.ProductModel;
import com.dubbo.service.ProductService;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
context.start();
ProductService service = (ProductService) context.getBean("productService"); //
List<ProductModel> list =service.GetAllProcuct();
for(ProductModel model:list)
{
System.out.println(model.getCode()+"--"+model.getName());
}
System.out.println( "dubbo调用完成!" );
}
}
代码下载
http://download.csdn.net/detail/zx13525079024/9601687