1、Dubbox简介

  Dubbox 是一个分布式服务架构,其前身是阿里巴巴开源项目 Dubbo,被国内电商及互联网项目使用,后期阿里巴巴停止了该项目的维护,当当网便在 Dubbo 基础上进行优化,并继续维护,为了与原有的 Dubbo 区分,故将其命名为 Dubbox。

  Dubbox 致力于提供高性能和透明话的 RPC 远程服务调用方案,以及 SOA  服务治理方案。简单的说,Dubbox 就是个服务框架,如果没有分布式的需全,其实是不需要用的,只有在分布式的时候,才有 Dubbox 这样的分布式服务架构需求  ,并且本质上是个服务调用的东西,说白了就是个远程服务调用的分布式架构。

  

  节点角色说明:

    Provider:暴露服务的服务提供方。

    Consumer:调用远程服务的服务消费方。

    Registry:服务注册与发现的注册中心。

    Monitor:统计服务的调用次数和调用时间的监控中心。

    Container:服务运行容器。

  调用关系说明:

    0、服务容器负责启动,加载,运行服务提供者。

    1、服务提供者在启动时,向注册中心注册自己提供的服务。

    2、服务消费者在启动时,向注册中心订阅自己所需的服务。

    3、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    4、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    5、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2、注册中心 Zookeeper

  1、Zookeeper 介绍

    官方推荐使用 zookeeper 注册中心。注册中心负责服务地址的注册于查找,相当于目录服务,服务提供者和消费者只在启动时于注册中心交互,注册中心不转发请求,压力较小。

    zookeeper 是 Appache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbox 服务的注册中心,工业强度较高,可用于生产环境。

  2、Zookeeper 在 Linux (虚拟机)系统的安装

    安装步骤:

    第一步:安装 jdk (zookeeper 的服务需要依赖于 JVM 环境)。

    第二步:把 zookeeper 的压缩包上传到 linux 系统 。

    第三步:解压缩压缩包(版本视自己的情况而定,文中版本仅为事例)。

      tar -zxvf zookeeper-3.4.6.tar.gz

    第四步:进入 zookeeper-3.4.6 目录,创建 data 目录。

      mkdir data

    第五步:进入 conf 目录,把 zoo_sample.cfg 改名为 zoo.cfg。

      cd conf

      mv zoo_sample.cfg zoo.cfg

    第六步:打开 zoo.cfg 文件,修改 data 属性:dataDir=/root/zookeeper-3.4.6/data (自己的 data 目录放在哪,就把路径写在哪)

      

  3、Zookeeper 服务启动

    进入 bin 目录,启动服务输入命令:./zkServer.sh start

    输出以下内容表示启动成功

    

    关闭服务输入命令:./zkServer.sh stop

    输出已下信息表示关闭成功

    

    查看状态输入命令:./zkServer.sh status

    如果服务为启动状态,提示

    

    如果服务为关闭状态,提示

    

3、Dubbox 本地 jar 包 部署与安装

  Dubbox 的 jar 包并没有部署到 Maven 中央仓库中,在 Maven 的中央仓库中可以查找到 Dubbo 的最终版本是 2.5.3,阿里解散了 Dubbo 团队后由当当网继续维护此项目,并改名为 Dubbox,坐标不变,版本变更了,但是没有提交到中央仓库。

  因此需要手动将 Dubbox 的 jar 包安装到自己的本地仓库中。

  先将 dubbo-2.8.4.jar 包放到 d:\setup (我的是这样,视自己的情况而定),然后输入命令

  

mvn install:install-file -Dfile=d:\setup\dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

4、配置离线约束(可选,这个步骤是为了在 application.xml 文件中配置 dubbo 时有提示)

  1、先进入eclipse 的 preferences 选项,然后找到 XML Catalog

  

  2、点击 Add ,选择 File System,打开预先下好的约束文件 dubbo.xsd

  

  将key 设置为 :http://code.alibabatech.com/schema/dubbo/dubbo.xsd

5、入门小 demo

  1、服务提供者开发

    1)、创建 Maven 工程(war)dubboxdemo-service,在 pom.xml 文件中引入依赖

    

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast.demo</groupId>
<artifactId>dubboxdemo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging> <properties>
<spring.version>4.2.4.RELEASE</spring.version>
</properties> <dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency> <!-- dubbo相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency> <dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.11.0.GA</version>
</dependency> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 指定端口 -->
<port>8081</port>
<!-- 请求路径 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>

    2)、在工程的 webapps 下创建 WEB-INF 文件夹,创建 web.xml 文件:

     

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"> <!-- 加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> </web-app>

    3)、创建包 com.itcast.dubbodemo.service,用于存放业务接口,创建接口

    

1 package com.itcast.demo.service;
2
3 public interface UserService {
4
5 public String getName();
6 }

    4)、创建业务实体类,创建包 com.itcast.dubbodemo.service.impl,用于存放业务实体类。创建业务实体类:

    

 1 package com.itcast.demo.service.impl;
2
3 import com.alibaba.dubbo.config.annotation.Service;
4 import com.itcast.demo.service.UserService;
5
6 @Service
7 public class UserServiceImpl implements UserService {
8
9 @Override
10 public String getName() {
11 // TODO Auto-generated method stub
12 return "itcast";
13 }
14
15 }

    注意:此时的 @Service 导的包是:com.alibaba.dubbo.config.annotation.Service ,如果是导的是 Spring 的包,获取的是本地的 Service,而我们是要获取远程的 Servie     服务,因此要注意

    5)、编写配置文件

      在 src/main/resources 下创建 applicationContext-service.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <dubbo:application name="dubboxdemo-service"/>
<dubbo:registry address="zookeeper://192.168.25.128:2181"/>
<dubbo:annotation package="com.itcast.demo.service.impl"/> </beans>

    注意:dubbo:registry  要填写自己的 zookeeper 所在的 linux 系统上的 ip 地址,端口号统一为 2181。

       dubbo:annotation 用于扫描 @Service 注解

    我的地址为: 192.168.25.128,自己 ip 地址是什么就写什么

    

    6)、测试运行

      tomcat7:run

  2、服务消费者开发

    1)、创建 Maven 工程(war)dubbodemo-web,在 pom.xml 引入依赖,同 dobbodemo-service 工程。区别就是把 tomcat 插件的运行端口号改为 8082(改成什么都 可以,只要不和 dubbodemo-service 一样就行)

    2)、在 webapps 目录下创建 WEB-INF 目录,并创建 web.xml

    

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!-- 解决post乱码 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>

    3)、拷贝业务接口

      将 "dubbodemo-service" 工程的 com.itcast.dubbodemo.service 包以及下面的接口拷贝至此工程

      

    4)、编写 Controller

    

 1 package com.itcast.demo.controller;
2
3 import org.springframework.stereotype.Controller;
4 import org.springframework.web.bind.annotation.RequestMapping;
5 import org.springframework.web.bind.annotation.ResponseBody;
6
7 import com.alibaba.dubbo.config.annotation.Reference;
8 import com.itcast.demo.service.UserService;
9
10 @Controller
11 @RequestMapping("/user")
12 public class UserController {
13 @Reference
14 private UserService userService;
15
16 @RequestMapping("/showName")
17 @ResponseBody
18 public String showName() {
19 return userService.getName();
20 }
21 }

    注意:此时装配 UserService 时不用注解 "@Autowired",该注解是装配本地的 UserService ,而我们要装配的是远程的 UserSrevice,因此这里使用 @Referenc。

    5)、编写 spring 配置文件

      在 src/main/resources 下创建 applicationContext-web.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <mvc:annotation-driven >
<mvc:message-converters register-defaults="false">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven> <dubbo:application name="dubboxdemo-web"/>
<dubbo:registry address="zookeeper://192.168.25.128:2181"/>
<dubbo:annotation package="com.itcast.demo.controller"/> </beans>

    6)、测试运行

    tomcat7:run

   

最后在浏览器输入:http://localhost:8082/user/showName.do  查看结果

注意:要把 dubbodemo-service 和 dubbodemo-web 的服务都启动起来,并确保 zookeeper 的服务为开启状态。

dubbox 入门demo的更多相关文章

  1. 【SSH系列】初识spring+入门demo

    学习过了hibernate,也就是冬天,经过一个冬天的冬眠,当春风吹绿大地,万物复苏,我们迎来了spring,在前面的一系列博文中,小编介绍hibernate的相关知识,接下来的博文中,小编将继续介绍 ...

  2. 基于springboot构建dubbo的入门demo

    之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...

  3. apollo入门demo实战(二)

    1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...

  4. lua入门demo(HelloWorld+redis读取)

    1. lua入门demo 1.1. 入门之Hello World!! 由于我习惯用docker安装各种软件,这次的lua脚本也是运行在docker容器上 openresty是nginx+lua的各种模 ...

  5. netty入门demo(一)

    目录 前言 正文 代码部分 服务端 客服端 测试结果一: 解决粘包,拆包的问题 总结 前言 最近做一个项目: 大概需求: 多个温度传感器不断向java服务发送温度数据,该传感器采用socket发送数据 ...

  6. canal入门Demo

    关于canal具体的原理,以及应用场景,可以参考开发文档:https://github.com/alibaba/canal 下面给出canal的入门Demo (一)部署canal服务器 可以参考官方文 ...

  7. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  8. SpringBoot 入门 Demo

    SpringBoot   入门 Demo Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从 ...

  9. ReactJs 入门DEMO(转自别人)

    附件是分享的一些他人的ReactJs入门DEMO,以前版本使用的是JSXTransformer.js,新版的用browser.min.js替代了. DEMO 下载地址:http://files.cnb ...

随机推荐

  1. UML的三项基础

    UML的定义 UML语义:描述基于UML的精确元模型定义. UML表示法:定义UML符号和文本语法提供标准. 五类模型图 用例视图:用例图 逻辑视图:类图.对象图.包图(我把包放在一起的图) 静态视图 ...

  2. jQuery与JavaScript与Ajax三者的区别与联系

    简单总结: 1.JS是一门 前端语言. 2.Ajax是一门 技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个 框架,它对JS进行 ...

  3. 用浏览器快速开启Docker的体验之旅

    互联网科技发展创造了很多奇迹,比如我今天要提到的 docker 技术就是其一.我很早就关注它(在2015年写过这方面的博客),那会儿还只是一个开源项目,现在已经是一个行业事实标准了,它推动了云原生的变 ...

  4. Windows常用cmd命令总结

    cmd是command的缩写,即命令提示符. 运行操作: 使用"Win+R"快捷键召唤出运行窗口,再在运行中输入cmd即可. 1.ping 用法: 常用举例: ping www.g ...

  5. spring boot redis 写入异常

    redis 的 key value 使用 json 序列化.反序列化时,写入的 bean 不能是 final 类型的类,否则无法解析

  6. Springboot目录结构分析

    1 src/main/java 存储源码 2 src/main/resource 资源文件夹    (1)src/main/resource/static 用于存放静态资源,如css.js.图片.文件 ...

  7. TypeError: this.getOptions is not a function

    我在vue ui界面中安装版本依赖包后报这个错误 less-loader/sass-loader安装的版本过高 解决办法 删除原有的版本依赖包,安装更低版本的依赖包. 如 @6.0.1为选择安装的版本 ...

  8. Java线程池ThreadPoolExecutor极简教程

    ThreadPoolExecutor 简介 ThreadPoolExecutor 是 java.util.concurrent 包下的一个类,在jdk1.5版本引入,帮助开发人员管理线程并方便地执行并 ...

  9. docker安装nginx,配置SSL

    nginx安装 下载镜像并测试 1.docker pull nginx 2.docker images nginx 查看我们拉取到本地的nginx镜像IMAGE ID 3.首先测试下nginx镜像是否 ...

  10. 联发科 (MTK) sensor bring up

    MT6768平台 1.添加驱动文件 2.添加硬件配置支持 3.添加硬件配置 4.添加编译配置 5.分配空间(非必要,当代码量超过当前空间大小时将会报错,根据报错log改大小即可.) 6.兼容配置 7. ...