第一章: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. 怎样使我们的用户不再抵触填写Form表单?

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/8-tips-for-an-awesome-sign ...

  2. SpringCloudAlibaba通过jib插件打包发布到docker仓库

    序言 在SpringBoot项目部署的时候,我了解到了Jib插件的强大,这个插件可以快速构建镜像发布到我们的镜像仓库当中去.于是我打算在毕设当中加上这个功能,并且整合到github actions中去 ...

  3. Win10该文件没有与之关联的应用来执行该操作...请在"默认应用设置"页面中创建关联

    问题发现:一直使用的一款软件--火柴,这两天忽然发现通过ctrl + 回车快捷键无法进入到文件所在的目录中(之前几天印象中还可以使用该功能).后来测试又发现无法打开网易云音乐中下载的音乐而进入到该音乐 ...

  4. 17.python自定义模块的导入方式

    1.直接用import导入 最后运行main.py可以看到命令行窗口输出了一句:你好,这样就完成了. 2.通过sys模块导入自定义模块的路径path 3.在环境变量中找到自定义模块 这个方法原理就是利 ...

  5. Intellij Idea插件使用记录之Alibaba Java Coding Guidelines

    目录 Intellij Idea插件Alibaba Java Coding Guidelines 前言 使用 感谢 Intellij Idea插件Alibaba Java Coding Guideli ...

  6. 【转】在NetBeans上搭建Android SDK环境

    本文将介绍在NetBeans 6.8上搭建Android SDK环境,目前Android在Netbeans上进行开发需要借助nbandroid的平台插件. 我们刚刚介绍过<MyEclipse上搭 ...

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

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

  8. 如何在ArcGIS中恢复注记文字

    文字标注是地图上一种特殊的视觉元素,可通过文字表达图形符号难以说明的地图内容,它与图形符号结合在一起存在于地图上,是关乎地图构图美的关键因素之一. MapGIS软件下子图对象和注释对象统统保存在点文件 ...

  9. 重拾c++第一天(1):环境配置

    时过多年,c++基本不记得了,故在此记录相关重拾记录. 学习语言第一步当然是环境配置了(笑),由于暂无用c++进行大型项目开发的需求,所以先下载dev进行过渡. 安装过程非常简单,值得注意的是配置时选 ...

  10. OffSet和Utc

    DateTime dtt = System.DateTime.Now ;//utcnow是格林威治的时间,与北京时间-8 strin(dtt); public static string strin( ...