第一章:Dubbox简介

Dubbox是一个开源的RPC(Remote ProcedureCall Protocol)远程调用框架,是由dangdang对阿里的Dubbo的升级,可以被视为Dubbo的增强版,基本架构没有变动,升级spring2.x到spring3.x,支持restful风格的调用调试方式,丰富了序列化的方式,提高了序列化的性能。

Dubbox的Github官网:

https://github.com/dangdangdotcom/dubbox

第二章 环境搭建(基于注册中心是Zookeeper的搭建)

2.1 dubbo-admin控制台的安装

2.1.1打开dubbox的官网https://github.com/dangdangdotcom/dubbox

点击Clone or download 我们选择最原始的Download ZIP,当前的stable版本是2.8.4

2.1.2下载到某个文件夹下,解压文件夹:

2.1.3 解压dubbox-master.zip

2.1.4按住键盘shift 鼠标右击,选择命令窗口,进入maven编译 :

mvn install -Dmaven.test.skip=true

编译安装大概需要4~5分钟,编译安装成功之后显示如下:

好了,到此为止,dubbox2.8.4就算是编译成功了,接下来我们要先搭建dubbox的控制台,因为可视化是我们最喜欢的模式了

2.1.5进入刚才的文件夹D:\dubboxstudy\dubbox-master\dubbo-admin\target

找到dubbo-admin-2.8.4.war文件,因为这是一个war文件,所以我们就使用tomcat启动,下载apache-tomcat-7.0.40-windows-x64.zip到我们dubbox study目录

解压apache-tomcat.zip,然后将刚才的dubbo-admin-2.8.4.war复制到D:\dubboxstudy\apache-tomcat-7.0.40\webapps文件夹下

因为dubbo的注册中心和管理控制台是依赖zookeeper,所以我们在测试环境下,需要启动一个zookeeper的实例,关于zookeeperwindow环境下的搭建就不赘述了,详细参考:

http://blog.csdn.net/morning99/article/details/40426133

2.1.6启动dubbo-admin控制台之前,先启动一个zookeeper实例(因为只是测试,所以就启动zookeeper集群了):

2.1.7启动tomcat,进入D:\dubbox study\apache-tomcat-7.0.40\bin,双击startup.bat

上图表示启动成功,启动成功之后,我们会发现D:\dubbox study\apache-tomcat-7.0.40\webapps下多了一个文件夹dubbo-admin-2.8.4,进入

D:\dubboxstudy\apache-tomcat-7.0.40\webapps\dubbo-admin-2.8.4\WEB-INF,打开dubbo.properties:

可以看到dubbo默认的注册机制是zookeeper,地址也是本地地址:127.0.0.1:2181,假如你此时zookeeper的实例的地址不是127.0.0.1:2181,或者注册机制是Redis的话,需要修改dubbo.properties的配置,此处就不做修改了

2.1.8打开浏览器。输入http://localhost:8080/dubbo-admin-2.8.4/,账户密码是root/root.就可以看到页面了

2.2 dubbo的Provider/Consumer 消费者和提供者的Demo代码编写

2.2.1环境准备JDK1.7 +Eclipse(STS) + Maven3.x

2.2.2新建WorkingSet

点击finish:

2.2.3新建maven项目

建好之后的目录结构:

2.2.4在bazinga-provider和bazinga-consumer的pom.xml中引入dubbox的依赖(暂时使用2.8.3的依赖,相对简单一点):

  1.  
    <properties>
  2.  
    <dubbox.version>2.8.3</dubbox.version>
  3.  
    <slf4j.version>1.7.5</slf4j.version>
  4.  
    <zookeeper.version>3.4.6</zookeeper.version>
  5.  
    </properties>
  6.  
    <dependencies>
  7.  
    <dependency>
  8.  
    <groupId>com.alibaba</groupId>
  9.  
    <artifactId>dubbo</artifactId>
  10.  
    <version>${dubbox.version}</version>
  11.  
    </dependency>
  12.  
    <dependency>
  13.  
    <groupId>org.slf4j</groupId>
  14.  
    <artifactId>slf4j-api</artifactId>
  15.  
    <version>${slf4j.version}</version>
  16.  
    </dependency>
  17.  
    <dependency>
  18.  
    <groupId>org.apache.zookeeper</groupId>
  19.  
    <artifactId>zookeeper</artifactId>
  20.  
    <version>${zookeeper.version}</version>
  21.  
    <exclusions>
  22.  
    <exclusion>
  23.  
    <groupId>io.netty</groupId>
  24.  
    <artifactId>netty</artifactId>
  25.  
    </exclusion>
  26.  
    <exclusion>
  27.  
    <groupId>org.slf4j</groupId>
  28.  
    <artifactId>slf4j-api</artifactId>
  29.  
    </exclusion>
  30.  
    <exclusion>
  31.  
    <groupId>log4j</groupId>
  32.  
    <artifactId>log4j</artifactId>
  33.  
    </exclusion>
  34.  
    <exclusion>
  35.  
    <groupId>org.slf4j</groupId>
  36.  
    <artifactId>slf4j-log4j12</artifactId>
  37.  
    </exclusion>
  38.  
    <exclusion>
  39.  
    <groupId>jline</groupId>
  40.  
    <artifactId>jline</artifactId>
  41.  
    </exclusion>
  42.  
    </exclusions>
  43.  
    </dependency>
  44.  
    <dependency>
  45.  
    <groupId>org.slf4j</groupId>
  46.  
    <artifactId>slf4j-api</artifactId>
  47.  
    <version>${slf4j.version}</version>
  48.  
    </dependency>
  49.  
    <dependency>
  50.  
    <groupId>com.101tec</groupId>
  51.  
    <artifactId>zkclient</artifactId>
  52.  
    <version>0.2</version>
  53.  
    </dependency>
  54.  
    <dependency>
  55.  
    <groupId>ch.qos.logback</groupId>
  56.  
    <artifactId>logback-classic</artifactId>
  57.  
    <version>1.0.13</version>
  58.  
    </dependency>
  59.  
    </dependencies>

2.2.5在bazinga-provider编写调用接口IDemoService:

  1.  
    package org.bazinga.service;
  2.  
     
  3.  
    public interface IDemoService {
  4.  
     
  5.  
    public String sayHello();
  6.  
     
  7.  
    }

具体的实现:

  1.  
    package org.bazinga.service.impl;
  2.  
     
  3.  
    import org.bazinga.service.IDemoService;
  4.  
     
  5.  
    public class IDemoServiceImpl implements IDemoService {
  6.  
     
  7.  
    public String sayHello() {
  8.  
    return "hello dubbox";
  9.  
    }
  10.  
     
  11.  
    }

2.2.6在src/main/resources下配置dubbo基于Spring的配置文件spring-dubbo-provider.xml,在这里需要配置注册中心的地址,通信的协议方式,服务提供者的应用名,最后就是最关键的需要暴露的服务,我们这里就是

  1.  
    <?xml version="1.1" encoding="UTF-8"?>
  2.  
    <beans xmlns="http://www.springframework.org/schema/beans"
  3.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4.  
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.  
    http://www.springframework.org/schema/beans/spring-beans.xsd
  6.  
    http://code.alibabatech.com/schema/dubbo
  7.  
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  8.  
     
  9.  
    <dubbo:application owner="lyncc" name="bazinga-app" />
  10.  
    <!--zookeeper注册中心 -->
  11.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
  12.  
     
  13.  
    <dubbo:protocol name ="dubbo" port="20880" />
  14.  
    <!-- 发布这个服务 -->
  15.  
    <dubbo:service protocol="dubbo" timeout="4000" connections="100" interface ="org.bazinga.service.IDemoService" ref="demoService" />
  16.  
    <!-- 和本地bean一样实现服务 -->
  17.  
    <bean id="demoService" class="org.bazinga.service.impl.IDemoServiceImpl" />
  18.  
     
  19.  
    </beans>

细心的你会发现左侧有报错的提示:

这个报错是因为不识别dubbo的命名空间,所以需要导入xsd文件,dubbo.xsd文件源码中有,网上也可以下载到,下载好或者在源码中找到之后,选择Windw->Perferences->XML->XMLCatelog->User Specifed Entries

点击add,点击FileSystem 选择你下载好的dubbo.xsd,输入key值,key值要与schema值一样,点击OK:

一路保存刚才的设置,重新打开spring-dubbo-provider.xml文件,可以发现报错消失。到此为止,dubbox的服务提供者端的代码已经编写完毕,我们写个测试类测试一下:

  1.  
    package org.bazinga.service.test;
  2.  
     
  3.  
    import org.springframework.context.support.ClassPathXmlApplicationContext;
  4.  
     
  5.  
    public class DubboxProviderDemoService {
  6.  
     
  7.  
    public static void main(String[] args) throws InterruptedException {
  8.  
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  9.  
    "spring-dubbo-provider.xml");
  10.  
    context.start();
  11.  
    Thread.sleep(2000000l);
  12.  
    }
  13.  
     
  14.  
    }

启动main函数之后,会发现dubbo-admin的控制台中提供者发现了该服务:

2.2.7服务提供者模块的编写,服务消费者只要有服务的接口就可以了,把服务提供者的接口复制到bazinga-consumer项目的同一个package下,注意必须放在同一个package下,也就是说服务消费者和服务提供者的接口的路径必须完全相同,因为这是服务的唯一标识,是一一对应的:

2.2.8服务消费端dubbo的配置文件的编写spring-dubbo-consumer.xml,因为dubbo具有服务自动发现的功能,所以我们这边只需要配置注册中心,服务消费者的名字,和需要订阅的服务接口信息,如下:

  1.  
    <?xml version="1.1" encoding="UTF-8"?>
  2.  
    <beans xmlns="http://www.springframework.org/schema/beans"
  3.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4.  
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.  
    http://www.springframework.org/schema/beans/spring-beans.xsd
  6.  
    http://code.alibabatech.com/schema/dubbo
  7.  
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  8.  
     
  9.  
    <dubbo:application owner="lyncc" name="bazinga-consumer" />
  10.  
    <!--zookeeper注册中心 -->
  11.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
  12.  
     
  13.  
    <dubbo:reference id="demoService" interface="org.bazinga.service.IDemoService"/>
  14.  
     
  15.  
    </beans>
  16.  
     

2.2.9编写测试类DubboConsumerDemoService:

  1.  
    package org.bazinga.service.test;
  2.  
     
  3.  
    import org.bazinga.service.IDemoService;
  4.  
    import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
     
  6.  
    public class DubboConsumerDemoService {
  7.  
     
  8.  
    public static void main(String[] args) throws InterruptedException {
  9.  
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  10.  
    "spring-dubbo-consumer.xml");
  11.  
    context.start();
  12.  
    IDemoService demoService = (IDemoService)context.getBean("demoService");
  13.  
    System.out.println(demoService.sayHello());
  14.  
    Thread.sleep(2000000l);
  15.  
    }
  16.  
     
  17.  
    }

先运行DubboxProviderDemoService的情况下,启动DubboConsumerDemoService的main函数,运行结果:

同时控制台admin页面也会显示消费者的信息:

好了,到此为止,最简单的Dubbo的Helloworld搭建完毕

2.3 本章小结

本章简单的搭建了一个Dubbo的Demo,配置了dubbo-admin控制页面平台,编写了一个简单的Hello World,服务提供者向zookeeper注册中心注册服务,服务消费者从注册中心订阅服务,发现服务的暴露地址,完成远程调用,下一个章节,我们稍微深入体验一下dubbo给我们带来的丰富的RPC的一些特性

Dubbox 环境搭建的更多相关文章

  1. Dubbox 环境搭建-新(Windows下)

    分布式服务框架 dubbo/dubbox 入门示例 dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http:// ...

  2. Dubbo简单环境搭建

    Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...

  3. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  4. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  5. rnandroid环境搭建

    react-native 环境搭建具体步骤这个大家已经玩烂了,这个主要是记录下来自己做win7系统遇到的坑 1.com.android.ddmlib.installexception 遇到这个问题,在 ...

  6. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  7. springMVC初探--环境搭建和第一个HelloWorld简单项目

    注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...

  8. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  9. Nexus(一)环境搭建

    昨天,成功搭建了自己的 Maven 环境(详见:Maven(一)环境搭建),今天就来研究和探讨下 Nexus 的搭建! 使用背景: 安装环境:Windows 10 -64位 JDK版本:1.7 Mav ...

随机推荐

  1. Django2.2 Cache缓存的设计以及几种方式的 多级或单级缓存处理

    首先照例说明一下缓存的作用以及Django中可以用到的缓存方式: 缓存的作用是用于数据项的再次加载,在设定的时间内可以无压力刷新或者再次访问该数据信息 方式一数据库缓存(Django原生的---有代码 ...

  2. Python+appium+unittest UI自动化测试

    什么是UI自动化 自动化分层 单元自动化测试,指对软件中最小可测试单元进行检查和验证,一般需要借助单元测试框架,如java的JUnit,python的unittest等 接口自动化测试,主要检查验证模 ...

  3. 1092 最好吃的月饼 (20分)C语言

    月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种. 若想评比出一种"最好吃"的月饼,那势必在吃货界引发一场腥风血雨-- 在这里我们用数字说话,给出全国各地各种月饼的 ...

  4. 推荐中的多任务学习-ESMM

    本文将介绍阿里发表在 SIGIR'18 的论文ESMM<Entire Space Multi-Task Model: An Effective Approach for Estimating Po ...

  5. solr学习(一)安装与部署

    经过测试,同步MongoDB数据到Solr的时候,Solr版本为8.4.0会出现连接不上的错误,8.3.0未经测试不知,博主测试好用的一版为8.2.0,但是官网已经下不到了,所以我会把下载链接放在文末 ...

  6. JVM之对象

    几乎所有对象都是在堆中分配内存的,这次来讲讲java的对象. 对象的创建主要分为以下几步: 首先,查看类是否装载.当JVM读取到new指令的时候,会拿着符号描述去方法区寻找它所属的类,如果未查找到,则 ...

  7. c语言一道题

    C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别 main(){inta=1,b=2,c=3;printf("%d,%d,%d,%d\n",a=b ...

  8. 【Spark 内核】 Spark 内核解析-上

    Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更 ...

  9. Java 第一次课堂测验

    周一下午进行了开学来java第一次课堂测验,在课堂上我只完成了其中一部分,现代码修改如下: 先定义 ScoreInformation 类记录学生信息: /** * 信1805-1 * 胡一鸣 * 20 ...

  10. 基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇

    前提 前置文章: Github Page:<基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> Coding Page:<基于Netty和SpringBoot实现 ...