Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
下面介绍dubbo环境搭建及相关demo
dubbo相关环境搭建
一、jdk和tomcat安装,很多人都会,不会的网上搜,一大把。
二、zookeeper的安装
1.下载Zookeeper-3.4.6.tar.gz 地址http://www.apache.org/dist/zookeeper/
2.把下载文件拷贝到指定路径并解压
解压后的路径:/usr/local/dubbo/zookeekper/zookeeper-3.4.6
3.进入根路径下的conf目录,拷贝zoo_sample.cfg到zoo.cfg,因为Zookeeper 在启动时会找zoo.cfg这个文件作为默认配置文件,命令如下:
4.进入根路径下的bin目录,启动服务,命令如下:
日志打印如下,启动成功

三、配置dubbo-admin的管理页面
1.下载dubbo源码,然后打包,下载地址:https://github.com/dangdangdotcom/dubbox
源码下载后导入到ide中,执行打包命令:
mvn clean install -Dmaven.test.skip=true
打包后的目录结构:
2.拷贝dubbo-admin-2.8.4.war到tomcat下的webapp中,修改dubbo.properties文件
主要修改zookeeper地址,和刚才配置的zookeeper地址一致
3.启动tomcat:
访问http://192.168.0.108:8080/dubbo-admin-2.8.4/(根据自己的地址做出修改),登录名和密码默认都是root,能出现以下界面证明配置成功
至此,dubbo的简单配置已经完成
接下来继续dubbo的使用demo
dubbo提供者和消费者demo
1.新建一个maven多模块项目,我的项目目录如下:
dubboProvider和dubboConsumer依赖dubboApi
相关依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.luojun</groupId>
<artifactId>dubboApi</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-rpc-rest</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-rpc-webservice</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.2</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
2.api相关代码,就一个简单的接口:
/**
* Created by lj on 2017/6/29.
*/
public interface HelloService {
/**
* 向世界问好
* @return
*/
String sayHello();
}
3.提供者相关代码:
/**
* Created by lj on 2017/6/29.
*/
public class HelloServiceImpl implements HelloService{
public String sayHello() {
return "hello world .....";
}
}
4.dubbo-provider.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="hello-world-app" owner="luojun"></dubbo:application>
<!--zookeeper注册中心 -->
<dubbo:registry address="zookeeper://192.168.0.108:2181"></dubbo:registry>
<!--<dubbo:registry address="zookeeper://192.168.1.103:2181"></dubbo:registry>-->
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!-- 发布这个服务 -->
<dubbo:service interface="com.luojun.serivce.HelloService" ref="helloService"></dubbo:service>
<bean class="com.luojun.HelloServiceImpl" id="helloService"></bean>
</beans>
5.提供者测试代码:
public class Provider
{
public static void main( String[] args ) throws Exception
{
ApplicationContext context=new ClassPathXmlApplicationContext("classpath:*provider.xml");
System.in.read();
}
}
6.执行main方法,刷新http://192.168.0.108:8080/dubbo-admin-2.8.4/governance/services,出现以下界面,说明服务启动注册成功
以下为消费者相关
7.消费者配置文件dubbo-consume.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="hello-world-consume" owner="luojun"></dubbo:application>
<!--zookeeper注册中心 -->
<dubbo:registry address="zookeeper://192.168.0.108:2181"></dubbo:registry>
<!--<dubbo:registry address="zookeeper://192.168.1.103:2181"></dubbo:registry>-->
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="helloService" interface="com.luojun.serivce.HelloService" ></dubbo:reference>
</beans>
8.消费者测试代码:
public class DubboConsumer
{
public static void main( String[] args ) throws Exception
{
ApplicationContext context=new ClassPathXmlApplicationContext("classpath:*.xml");
HelloService service= (HelloService) context.getBean("helloService");
System.out.println(service.sayHello());
}
}
9.执行main方法,控制台如下:
刷新http://192.168.0.108:8080/dubbo-admin-2.8.4/governance/consumers,出现以下界面:
到此dubbo提供者和消费者demo新建完成且测试通过
附件:
demo源码
dubbo-admin-2.8.4.war