zoukankan      html  css  js  c++  java
  • dubbo基础

    一、什么是dubbo,有什么用

      dubbo是阿里巴巴开源的一个RPC框架,用于多个应用相互通信。使用dubbo需要安装一zookepper

    二、dubbo的基本使用

      1、构建一个maven的多模块项目,项目的大致结构如下

        

      父项目doubbo的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.kyle</groupId>
      <artifactId>dubbo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>pom</packaging>
      
      
      
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        
        <!-- spring版本号 -->
        <spring.version>4.2.5.RELEASE</spring.version>
        
        <!-- log4j日志包版本号 -->
        <slf4j.version>1.7.18</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        
       </properties>
       
       <dependencyManagement>
          <dependencies>
            
            <!-- 添加junit4依赖 -->
            <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.11</version>
            </dependency>
     
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
     
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
     
       
            <!-- 添加日志相关jar包 -->
            <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>${log4j.version}</version>
            </dependency>
            <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-api</artifactId>
              <version>${slf4j.version}</version>
            </dependency>
            <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-log4j12</artifactId>
              <version>${slf4j.version}</version>
            </dependency>
        
             <dependency>
                 <groupId>commons-logging</groupId>
                 <artifactId>commons-logging</artifactId>
                 <version>1.2</version>
             </dependency>
        
            <!-- dubbo -->
            <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>dubbo</artifactId>
              <version>2.5.3</version>
              <exclusions>
                <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring</artifactId>
                </exclusion>
              </exclusions>
            </dependency>
        
            <!-- Zookeeper zkclient-->
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>
        
       </dependencies>
      </dependencyManagement>
       
       <modules>
           <module>dubbo-api</module>
           <module>dubbo-provider</module>
           <module>dubbo-consumer</module>
       </modules>
    </project>

      dubbo-api模块用于提供接口,dubbo-provider模块和dubbo-consumer模块都需要引用dubbo-api模块。从而达到模块之间松耦合的作用。

      下面是dubbo-api的相关代码和pom文件

    package com.test;
    
    public interface DemoService{  
         String sayHello(String name);  
    } 
    <?xml version="1.0"?>
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <modelVersion>4.0.0</modelVersion>
      
      <parent>
        <groupId>com.kyle</groupId>
        <artifactId>dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      
      <groupId>com.kyle</groupId>
      <artifactId>dubbo-api</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>dubbo-api</name>
      <url>http://maven.apache.org</url>
      
      
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>

        dubbo-provider 是提供服务的模块,其代码和配置如下:

    package org.dubbo.provider;
    import org.springframework.stereotype.Service;
    
    import com.test.DemoService;
    
    //@Service("demoService")
    public class DemoServiceImpl implements DemoService{
    
        @Override
        public String sayHello(String name) {
            
            return name+"你好啊"; 
        }  
    }
    <?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:dubbo="http://code.alibabatech.com/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        
        <bean id="demoService" class="org.dubbo.provider.DemoServiceImpl"></bean>
    
        <!-- 提供方应用信息,用于计算依赖关系 -->  
        <dubbo:application name="dubbo_provider"  />  
    
        <!-- 使用zookeeper注册中心暴露服务地址 -->  
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />   
    
        <!-- 用dubbo协议在20880端口暴露服务 -->  
        <dubbo:protocol name="dubbo" port="20880" />  
    
        <!-- 声明需要暴露的服务接口 -->  
        <dubbo:service interface="com.test.DemoService" ref="demoService" />  
    </beans>
    <?xml version="1.0"?>
    <project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.kyle</groupId>
            <artifactId>dubbo</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <groupId>com.kyle</groupId>
        <artifactId>dubbo-provider</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>dubbo-provider</name>
        <url>http://maven.apache.org</url>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.kyle</groupId>
                <artifactId>dubbo-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
            </dependency>
    
    
            <!-- 添加日志相关jar包 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </dependency>
    
            <!-- dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!-- Zookeeper zkclient -->
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
            </dependency>
        </dependencies>
    
    
    </project>

        dubbo-consumer是服务消费方

    package com.dubbo.consumer;
    
    import java.io.IOException;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.test.DemoService;
    
    public class Test {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext context = 
                    new ClassPathXmlApplicationContext("dubbo-consumer.xml");
    
            context.start();
            DemoService demoService = (DemoService) context.getBean("demoService");
    
            System.out.println(demoService.sayHello("kyle"));
            try {
                System.in.read();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    <?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:dubbo="http://code.alibabatech.com/schema/dubbo"    
        xsi:schemaLocation="http://www.springframework.org/schema/beans    
            http://www.springframework.org/schema/beans/spring-beans.xsd    
            http://code.alibabatech.com/schema/dubbo    
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">     
                 
        <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->    
        <dubbo:application name="dubbo_consumer" />       
          <!-- 使用multicast广播注册中心暴露发现服务地址 -->    
        <dubbo:registry  protocol="zookeeper" address="zookeeper://127.0.0.1:2181" />         
          <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->    
        <dubbo:reference id="demoService" interface="com.test.DemoService" />    
    </beans>   
    <?xml version="1.0"?>
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>com.kyle</groupId>
        <artifactId>dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <groupId>com.kyle</groupId>
      <artifactId>dubbo-consumer</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>dubbo-consumer</name>
      <url>http://maven.apache.org</url>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      <dependencies>
      
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
        </dependency>
        
         <dependency>
            <groupId>com.kyle</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
         </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
     
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
     
        <!-- dubbo -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>dubbo</artifactId>
          <exclusions>
            <exclusion>
              <groupId>org.springframework</groupId>
              <artifactId>spring</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
       
        <!-- Zookeeper zkclient-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        
      </dependencies>
    
    </project>

    三、dubbo管理平台的搭建

      1.下载dubbo管理平台的war包, dubbo-admin-2.6.0.war,并部署到tomcat。

      2.修改配置文件dubbo.properties

    dubbo.registry.address=zookeeper://127.0.0.1:2181
    
    dubbo.admin.root.password=root
    
    dubbo.admin.guest.password=guest

      3.访问dubbo管理平台

  • 相关阅读:
    TCP/IP的确认号,序列号和超时重传的学习笔记
    Linux进程的虚拟内存
    Linux内存:物理内存管理概述
    Linux进程: task_struct结构体成员
    Linux进程:管理和调度
    Golang基础(8):go interface接口
    技术管理:团队建设
    从分布式一致性谈到CAP理论、BASE理论
    技术管理:项目管理概要
    [译]深入 NGINX: 为性能和扩展所做之设计
  • 原文地址:https://www.cnblogs.com/kyleinjava/p/9429352.html
Copyright © 2011-2022 走看看