前沿:在当下流行的分布式架构中Dubbo是非常流行的一门技术,借着这几天有空学习学习,并在后面的项目中进行实战,为后面的分布式项目做铺垫。

Dubbox简介

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

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

在这里插入图片描述
节点角色说明:

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

调用关系说明:

  • 服务容器负责启动,加载,运行服务提供者。
  • 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推
    送变更数据给消费者。
  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,
    如果调用失败,再选另一台调用。
  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计
    数据到监控中心。

Zookeeper 介绍

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

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

Zookeeper 在Linux系统的安装

安装步骤:
第一步:安装 jdk
第二步:把 zookeeper 的压缩包上传到 linux 系统。
注意:Alt+P 进入SFTP ,输入put d:\zookeeper-3.4.6.tar.gz 上传
第三步:解压缩压缩包

1tar -zxvf zookeeper-3.4.6.tar.gz

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

1mkdir data

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

1cd conf2mv zoo_sample.cfg zoo.cfg

第六步:打开zoo.cfg , 修改 data 属性:dataDir=/root/zookeeper-3.4.6/data

Zookeeper 服务启动

进入bin目录,启动服务输入命令

1 ./zkServer.sh start

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

在这里插入图片描述
关闭服务输入命令

1./zkServer.sh stop

输出以下提示信息

在这里插入图片描述
查看状态:

1./zkServer.sh status

如果启动状态,提示

在这里插入图片描述
如果未启动状态,提示:
在这里插入图片描述

Dubbo本地 JAR包部署与安装

Dubbo的jar包并没有部署到Maven的中央仓库中,大家在Maven的中央仓库中可以查找到Dubbo的最终版本是2.5.3 , 阿里巴巴解散了Dubbo团队后由当当网继续维护此项目,并改名为 Dubbox ,坐标不变,版本变更了,但是并没有提交到中央仓库。
我们现在需要手动将Dubbox的jar包安装到我的本地仓库中。
先将dubbo-2.8.4.jar包放到d:\setup, 然后输入命令

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

下载网址:https://github.com/dangdangdotcom/dubbox/tree/dubbox-2.8.4
下载后直接解压,解压后,直接cd进入dubbo中进行maven的打包,然后在target目录就会生成dubbox-2.8.4.jar包

入门实战

  • 创建Maven工程(WAR)dubboxdemo-service ,在pom.xml中引入依赖
 1<projectxmlns="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"> 2<modelVersion>4.0.0</modelVersion> 3<groupId>cn.itcast.dubboxdemo</groupId> 4<artifactId>dubboxdemo-service</artifactId> 5<version>0.0.1-SNAPSHOT</version> 6<packaging>war</packaging> 7<properties>         8        <spring.version>4.2.4.RELEASE</spring.version> 9</properties>10    <dependencies>11        <!-- Spring -->12        <dependency>13            <groupId>org.springframework</groupId>14            <artifactId>spring-context</artifactId>15            <version>${spring.version}</version>16        </dependency>17        <dependency>18            <groupId>org.springframework</groupId>19            <artifactId>spring-beans</artifactId>20            <version>${spring.version}</version>21        </dependency>22        <dependency>23            <groupId>org.springframework</groupId>24            <artifactId>spring-webmvc</artifactId>25            <version>${spring.version}</version>26        </dependency>27        <dependency>28            <groupId>org.springframework</groupId>29            <artifactId>spring-jdbc</artifactId>30            <version>${spring.version}</version>31        </dependency>32        <dependency>33            <groupId>org.springframework</groupId>34            <artifactId>spring-aspects</artifactId>35            <version>${spring.version}</version>36        </dependency>37        <dependency>38            <groupId>org.springframework</groupId>39            <artifactId>spring-jms</artifactId>40            <version>${spring.version}</version>41        </dependency>42        <dependency>43            <groupId>org.springframework</groupId>44            <artifactId>spring-context-support</artifactId>45            <version>${spring.version}</version>46        </dependency>   47        <!-- dubbo相关 -->48        <dependency>49            <groupId>com.alibaba</groupId>50            <artifactId>dubbo</artifactId>51            <version>2.8.4</version>            52        </dependency>53        <dependency>54            <groupId>org.apache.zookeeper</groupId>55            <artifactId>zookeeper</artifactId>56            <version>3.4.6</version>57        </dependency>58        <dependency>59            <groupId>com.github.sgroschupf</groupId>60            <artifactId>zkclient</artifactId>61            <version>0.1</version>62        </dependency>       63        <dependency>64            <groupId>javassist</groupId>65            <artifactId>javassist</artifactId>66            <version>3.11.0.GA</version>67        </dependency>       68    </dependencies>69<build>70    <plugins>71    <plugin>72    <groupId>org.apache.maven.plugins</groupId>73    <artifactId>maven-compiler-plugin</artifactId>74    <version>2.3.2</version>75    <configuration>76    <source>1.7</source>77    <target>1.7</target>78    </configuration>79    </plugin>80    <plugin>81                <groupId>org.apache.tomcat.maven</groupId>82                <artifactId>tomcat7-maven-plugin</artifactId>83                <configuration>84                    <!-- 指定端口 -->85                    <port>8081</port>86                    <!-- 请求路径 -->87                    <path>/</path>88                </configuration>89        </plugin>90    </plugins>91</build>92</project>
  • 在工程的webapps下创建WEB-INF文件夹,创建web.xml
 1<?xmlversion="1.0"encoding="UTF-8"?> 2<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3    xmlns="http://java.sun.com/xml/ns/javaee" 4    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 5    version="2.5">   6    <!-- 加载spring容器 --> 7    <context-param> 8        <param-name>contextConfigLocation</param-name> 9        <param-value>classpath:applicationContext*.xml</param-value>10    </context-param>11    <listener>      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>12    </listener> 13</web-app>
  • 创建业务接口,创建包cn.ldc.org.dubbodemo.service,用于存放业务接口,创建接口
1package cn.ldc.org.dubbodemo.service;2/**3 * 业务接口4 * @author Administrator5 *6 */7publicinterface UserService {    8    public String getName();    9}
  • 创建业务实现类
    创建包cn.ldc.org.dubbodemo.service.impl ,用于存放业务实现类。创建业务实现类:
1package cn.ldc.org.dubbodemo.service.impl;2import com.alibaba.dubbo.config.annotation.Service;3import cn.itcast.dubbodemo.service.UserService;4@Service5publicclass UserServiceImpl implements UserService {6    public String getName() {       7        return"itcast";8    }9}

注意:Service注解与原来不同,需要引入com.alibaba包下的

  • 编写配置文件

在src/main/resources下创建applicationContext-service.xml ,内容如下:

 1<?xmlversion="1.0"encoding="UTF-8"?> 2<beansxmlns="http://www.springframework.org/schema/beans" 3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p" 4    xmlns:context="http://www.springframework.org/schema/context" 5    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns:mvc="http://www.springframework.org/schema/mvc" 6    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 8        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd 9        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">1011<dubbo:application name="dubboxdemo-service"/>12<dubbo:registry address="zookeeper://192.168.179.128:2181"/>13<dubbo:annotation package="cn.ldc.org.dubboxdemo.service" />14</beans>

注意:dubbo:annotation用于扫描@Service注解。

  • 测试运行
1tomcat7:run

服务消费者开发

开发步骤:
(1)创建Maven工程(WAR)dubboxdemo-web ,在pom.xml引入依赖 ,同“dubboxdemo-service”工程。区别就是把tomcat插件的运行端口改为8082 。
(2)在webapps目录下创建WEB-INF 目录,并创建web.xml

 1<?xmlversion="1.0"encoding="UTF-8"?> 2<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3    xmlns="http://java.sun.com/xml/ns/javaee" 4    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 5    version="2.5">   6<!-- 解决post乱码 --> 7    <filter> 8        <filter-name>CharacterEncodingFilter</filter-name>      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 9        <init-param>10            <param-name>encoding</param-name>11            <param-value>utf-8</param-value>12        </init-param>13        <init-param>14<param-name>forceEncoding</param-name>15<param-value>true</param-value>16</init-param>17    </filter>18    <filter-mapping>19        <filter-name>CharacterEncodingFilter</filter-name>20        <url-pattern>/*</url-pattern>21    </filter-mapping>       22<servlet>23    <servlet-name>springmvc</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>24    <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->25    <init-param>26        <param-name>contextConfigLocation</param-name>27        <param-value>classpath:applicationContext-web.xml</param-value>28    </init-param>29</servlet>30<servlet-mapping>31    <servlet-name>springmvc</servlet-name>32    <url-pattern>*</url-pattern>33</servlet-mapping>34</web-app>

(3)拷贝业务接口
将“dubboxdemo-service”工程的cn.ldc.org.dubboxdemo.service 包以及下面的接口拷贝至此工程。
(4)编写Controller

 1package cn.ldc.org.dubboxdemo.controller; 2import org.springframework.beans.factory.annotation.Autowired; 3import org.springframework.stereotype.Controller; 4import org.springframework.web.bind.annotation.RequestMapping; 5import org.springframework.web.bind.annotation.ResponseBody; 6import cn.itcast.dubbodemo.service.UserService; 7@Controller 8@RequestMapping("/user") 9publicclass UserController {10    @Reference11    private UserService userService;    12    @RequestMapping("/showName")13    @ResponseBody14    public String showName(){15        returnuserService.getName();16    }       17}

(5)编写spring配置文件
在src/main/resources下创建applicationContext-web.xml

 1<?xmlversion="1.0"encoding="UTF-8"?> 2<beansxmlns="http://www.springframework.org/schema/beans" 3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p" 4    xmlns:context="http://www.springframework.org/schema/context" 5    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns:mvc="http://www.springframework.org/schema/mvc" 6    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 8        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd 9        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">1011    <mvc:annotation-driven >12        <mvc:message-converters register-defaults="false">13            <bean class="org.springframework.http.converter.StringHttpMessageConverter">14                <constructor-arg value="UTF-8" />15            </bean>16        </mvc:message-converters>   17    </mvc:annotation-driven>18    <!-- 引用dubbo 服务 -->19    <dubbo:application name="dubboxdemo-web" />20    <dubbo:registry address="zookeeper://192.168.179.128:2181"/>21<dubbo:annotation package="cn.ldc.org.dubboxdemo.controller" />22</beans>

测试运行

1tomcat7:run

在浏览器输入http://localhost:8082/user/showName,查看浏览器输出结果

更多的教程请关注:非科班的科班

Dubbo入门到实战的更多相关文章

  1. dubbo学习实践(2)之Dubbo入门Demo

    开篇之前,先来了解下dubbo服务治理与技术架构,直接看图 dubbo技术架构图: 1. 新建dubbo项目,目录结构如下 代码说明: 1.代码分为Provider(服务提供方)与consumer(服 ...

  2. Dubbo从入门到实战视频教程

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成.这里整理了一套关于dubbo的视频教程分享给大家,包 ...

  3. Dubbo从入门到实战:实战篇

    一.加入 zookeeper 作为注册中心 在前面的案例中,我们没有使用任何的注册中心,而是用一种直连的方式进行的.但是,实际上很多时候,我们都是使用 dubbo + zookeeper 的方式,使用 ...

  4. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  5. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

    最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...

  6. docker-9 supervisord 参考docker从入门到实战

    参考docker从入门到实战 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机 ...

  7. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  8. CMake快速入门教程-实战

    http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...

  9. Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

    该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置.   传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...

随机推荐

  1. Android APP开发内容图片不显示

    I/Glide: Root cause (1 of 1) Cause (1 of 1): class java.io.FileNotFoundException: No content provide ...

  2. Visual Studio Team Services使用教程【3】:默认团队权限说明

    2017.4.23之后建议朋友看下面的帖子 TFS2017 & VSTS 实战(繁体中文视频) Visual Studio Team Services(VSTS)与敏捷开发ALM实战关键报告( ...

  3. JLINK、ULINK和STlink仿真器详解

    JLink仿真器 德国SEGGER公司推出基于JTAG的仿真器.简单地说,是给一个JTAG协议转换盒,即一个小型USB到JTAG的转换盒,其连接到计算机用的是USB接口,而到目标板内部用的还是jtag ...

  4. 如何在MPlayer上支持RTSP

    http://www.live555.com/mplayer/ 请按照如下步骤 下载 "LIVE555 Streaming Media" l的库的源码, 解压后 将"li ...

  5. Visio流程图表

    基本流程图: 流程图类别 基本流程图的四种类型 打开基本流程图 注意页面内引用跟跨页引用 就是两个按钮的作用 就是一个按钮的作用 点击跳转 按钮设置好之后可以输入数字 方便区分跳转 下面是跨职能流程图 ...

  6. 6.ChannelPipeline

    pipeline和handler ChannelPipline ChannelHandler ChannelHandlerContext pipeline的初始化 handler的添加和删除 hand ...

  7. 014 Ceph管理和自定义CRUSHMAP

    一.概念 1.1 Ceph集群写操作流程 client首先访问ceph monitor获取cluster map的一个副本,知晓集群的状态和配置 数据被转化为一个或多个对象,每个对象都具有对象名称和存 ...

  8. Springboot 添加热部署

    Pom 文件 添加依赖 添加插件 修改idea ,启动自动部署 <!--配置热部署--> <dependency> <groupId>org.springframe ...

  9. 「HDU3823」 Prime Friend 解题报告

    Prime Friend Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...

  10. 还在使用OpenGL ES做渲染,你Out了,赶紧来拥抱Vulkan吧~

    背景介绍 Vulkan是Khronos组织制定的"下一代"开放的图形显示API.是与DirectX12能够匹敌的GPU API标准. Vulkan是基于AMD的Mantle API ...