zoukankan      html  css  js  c++  java
  • dubbox 入门demo

    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:setupdubbo-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 的服务为开启状态。

  • 相关阅读:
    jquery 序列化form表单
    nginx for windows 安装
    nodejs idea 创建项目 (一)
    spring 配置 shiro rememberMe
    idea 2018 解决 双击shift 弹出 search everywhere 搜索框的方法
    redis 在windows 集群
    spring IOC控制反转和DI依赖注入
    redis 的安装
    shiro 通过jdbc连接数据库
    handlebars的用法
  • 原文地址:https://www.cnblogs.com/elementplay/p/10838780.html
Copyright © 2011-2022 走看看