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集群如下:
4、Dubbo依赖的jar包
5、Dubbo的Admin
Dubbo的Admin版本为:dubbo-admin-2.5.4.war
注意:Dubbo的版本和Dubbox的版本不能混用,否则会出现一些莫名其妙的问题。
二、抽象服务
1、新建一个Maven工程,工程结构如下:
该组件是我们对外暴露的服务的接口以及涉及的vo定义组件,可以把这个组件理解为facade设计模式,对外提供统一的服务。
2、接口代码如下:
3、Vo类如下:
三、服务提供者
1、新建一个Maven工程,工程结构如下:
注意,该工程需要依赖dubbo-facade工程,在pom文件里引入工程依赖即可
PS:在引入dubbo-facade工程之前,需要使用maven install命令,将该工程加入maven的本地仓库中,否则会引入失败。
2、实现服务接口,代码如下:
3、服务提供端配置
注意:需要加入dubbo的schema
4、服务启动类
经过上面的几个步骤,服务端就算是ok了,是不是很简单。
四、服务调用者
1、新建一个Maven工程,工程结构如下:
注意,该工程同样需要依赖dubbo-facade工程
2、服务调用端配置
注意:同样需要引入dubbo的schema
3、客户端启动类
先后启动服务端和客户端,会发现zookeeper中多了dubbo这个节点,测试结果如下:
从测试结果可以看出,客户端成功调用了服务端的服务。
六、安装dubbo admin
1、将dubbo-admin-2.5.4.war包放到tomcat的webapp下,并解压该war包,解压后的目录结果如下:
2、修改WEB-INF下的dubbo.properties文件
文件内容修改如下:
3、启动tomcat
4、在浏览器中输入http://localhost:8080/dubbo-admin-2.5.4/
说明:dubbo-admin-2.5.4是war包的名字。
进入后,就可以看到我们发布的服务以及一些服务治理相关的东东
到这里,dubbo的hello world入门版就讲完了,关于后面更深层次的讲解,请期待后面的博客。
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入门版就讲完了,关于后面更深层次的讲解,请期待后面的博客。
相关文章推荐
- AngularJS入门示例之Hello World详解
- React入门教程之Hello World以及环境搭建详解
- Qt on Android:图文详解QT开发Andriod入门,Hello World全过程
- Dubbo入门理解详解!(入门---搭建一个最简单的Demo框架)
- dubbo入门--Hello World
- dubbo入门Hello World
- Dubbo入门-分布式原理详解--搭建一个最简单的Demo框架
- dubbo学习教程(一):完成入门第一个hello world程序【基于zookeeper】
- dubbo+zoopkeeper入门详解
- Hibernate入门 - 包作用详解
- Hibernate入门 - 包作用详解
- Hibernate入门 - 包作用详解
- Hello World - WDM驱动程序入门 安装步骤
- VC++入门程序详解
- Hibernate入门 - 包作用详解
- NHibernate入门hello world
- Windows API-GDI入门基础知识详解(1)
- PHP快速入门教程:hello world
- Hibernate入门 - 包作用详解