您的位置:首页 > 其它

Dubbo入门详解之Hello World

2016-12-17 15:07 281 查看
一、准备

1、Dubbo源码地址:

https://github.com/alibaba/dubbo

2、用户指南:

http://dubbo.io/User+Guide-zh.htm

3、Zookeeper集群环境

关于Zookeeper集群环境的搭建,这里就不做过多的阐述了,有不了解的,请参考我的另一篇博客,地址如下:

http://blog.csdn.net/liuchuanhong1/article/details/53192618

Zookeeper集群如下:

192.168.1.108:2181
192.168.1.109:2181
192.168.1.110:2181

4、Dubbo依赖的jar包

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- dubbo dependency -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.2</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
</dependency>
<dependency>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
<version>3.2.9.Final</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>com.chhliu.dubbo</groupId>
<artifactId>dubbo-facade</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
注意:需要在Dubbo的jar依赖中,去除spring的依赖,默认情况下,Dubbo依赖的是spring的2.x版本,而我们开发中一般使用的都是spring的高版本。
5、Dubbo的Admin

Dubbo的Admin版本为:dubbo-admin-2.5.4.war

注意:Dubbo的版本和Dubbox的版本不能混用,否则会出现一些莫名其妙的问题。

二、抽象服务

1、新建一个Maven工程,工程结构如下:

 


该组件是我们对外暴露的服务的接口以及涉及的vo定义组件,可以把这个组件理解为facade设计模式,对外提供统一的服务。

2、接口代码如下:

package com.chhliu.dubbo.facade.service;

import java.util.List;

import com.chhliu.dubbo.facade.vo.User;

/**
* 描述:提供的服务
* @author chhliu
*/
public interface UserServiceI {
String sayHello(String world);
List<User> getUsers();
}

3、Vo类如下:

package com.chhliu.dubbo.facade.vo;
import java.io.Serializable;

/**
* 描述:用戶实体类
* @author chhliu
*/
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
// id
private int id;
// 用戶名
private String username;
// 年齡
private int age;
// 性別
private String sex;
}
注意:服务的vo必须实现Serializable接口,否则客户端调用服务端服务的时候,反序列化的时候,会出问题。
三、服务提供者

1、新建一个Maven工程,工程结构如下:

 


注意,该工程需要依赖dubbo-facade工程,在pom文件里引入工程依赖即可

PS:在引入dubbo-facade工程之前,需要使用maven install命令,将该工程加入maven的本地仓库中,否则会引入失败。

2、实现服务接口,代码如下:

package com.chhliu.dubbo.service;

import java.util.ArrayList;
import java.util.List;

import com.chhliu.dubbo.facade.service.UserServiceI;
import com.chhliu.dubbo.facade.vo.User;
/**
* 描述:服务接口实现类
* @author chhliu
*/
public class UserServiceImpl implements UserServiceI {

@Override
public String sayHello(String world) {
return "hello"+world;
}

@Override
public List<User> getUsers() {
List<User> list = new ArrayList<User>();
User u1 = new User();
u1.setId(1);
u1.setUsername("chhliu");
u1.setAge(27);
u1.setSex("man");
list.add(u1);
User u2 = new User();
u2.setId(2);
u2.setAge(18);
u2.setSex("woman");
u2.setUsername("xyh");
list.add(u2);
return list;
}

}

3、服务提供端配置

<?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="userService" class="com.chhliu.dubbo.service.UserServiceImpl" />

<!-- 提供方应用信息,用于计算依赖关系,需唯一  -->
<dubbo:application name="dubbo-producer" />

<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.1.108:2181" />

<!-- 用dubbo协议在20888端口暴露服务,端口不能被占用,此处我们使用dubbo协议,也可以使用rest协议 -->
<dubbo:protocol name="dubbo" port="20888" />

<!-- 声明需要暴露的服务接口  写操作可以设置retries=0 避免重复调用SOA服务 -->
<dubbo:service retries="0" interface="com.chhliu.dubbo.facade.service.UserServiceI" ref="userService" />

</beans>

注意:需要加入dubbo的schema

4、服务启动类

package com.chhliu.dubbo.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {

public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "dubbo-producer.xml" });
context.start();
System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
}
}

经过上面的几个步骤,服务端就算是ok了,是不是很简单。

四、服务调用者

1、新建一个Maven工程,工程结构如下:

 


注意,该工程同样需要依赖dubbo-facade工程

2、服务调用端配置

<?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="dubbo-consumer" />

<!-- 设置注册中心地址,测试的时候可以只写一个zookeeper服务器地址,正式生产上需要将zookeeper集群的所有服务器地址都加上  -->
<dubbo:registry address="zookeeper://192.168.1.108:2181" />

<!-- 生成远程服务代理,可以像使用本地bean一样使用userService 检查级联依赖关系 默认为true 当有依赖服务的时候,需要根据需求进行设置 -->
<dubbo:reference id="userService" check="false"
interface="com.chhliu.dubbo.facade.service.UserServiceI" />

</beans>

注意:同样需要引入dubbo的schema

3、客户端启动类

package com.chhliu.dubbo.consumer;

import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.chhliu.dubbo.facade.service.UserServiceI;
import com.chhliu.dubbo.facade.vo.User;

public class Consumer {

public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "dubbo-consumer.xml" });
context.start();

UserServiceI userService = (UserServiceI) context.getBean("userService");
String hello = userService.sayHello(" dubbo world!");
System.out.println(hello);

List<User> list = userService.getUsers();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getUsername());
}
}
System.in.read();
}

}
五、测试
先后启动服务端和客户端,会发现zookeeper中多了dubbo这个节点,测试结果如下:

hello dubbo world!
chhliu
xyh

从测试结果可以看出,客户端成功调用了服务端的服务。

六、安装dubbo admin

1、将dubbo-admin-2.5.4.war包放到tomcat的webapp下,并解压该war包,解压后的目录结果如下:

 


2、修改WEB-INF下的dubbo.properties文件

文件内容修改如下:

dubbo.registry.address=zookeeper://192.168.1.108:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=123456

3、启动tomcat

4、在浏览器中输入http://localhost:8080/dubbo-admin-2.5.4/

说明:dubbo-admin-2.5.4是war包的名字。

进入后,就可以看到我们发布的服务以及一些服务治理相关的东东

 




 

到这里,dubbo的hello world入门版就讲完了,关于后面更深层次的讲解,请期待后面的博客。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: