你是否和我一样,每天进步一点,不断变强

介绍

Dubbo 一个高性能的Java RPC的开源框架,一开始是阿里开源在GitHub上的,后来托管给了Apache,Dubbo的开发文档非常详细易懂,对开发者很友好,Dubbo官网,核心图:
clipboard.png

  • RPC:Remote Procedure Call,远程调用,具体介绍
  • Provider:服务的提供者,暴露服务
  • Registry:注册中心,负责服务的注册以及服务事件的发布和订阅
  • Consumer:消费者,调用服务方
  • Monitor:服务监控中心,非必须

下载注册中心,推荐ZooKeeper

开发文档
下载ZooKeeper压缩包后解压,进入bin路径,cmd下运行zkServer.cmd
报错:进入conf文件夹,复制zoo_sample.cfg,粘贴后重命名zoo.cfg,再次运行

clipboard.png
如图,启动成功,验证:bin目录下cmd运行zkCli.cmd

安装dubbo-ops

  1. 在github下下载压缩包,解压,进入dubbo-admin,这是一个Spring Boot下的项目
  2. 在项目路径使用maven打包成jar,启动项目
  3. 在浏览器打开端口,输入账号密码,如图

clipboard.png
注意事项:此操作需要在ZooKeeper启动下才能成功,不知道端口等配置去项目文件查看,注意application.properties文件下的dubbo.registry.address配置应该和上一步一样

入门开发(idea下)

新建maven父子项目,3个子项目,Provider、Consumer以及中间方

中间方主要存放实体类和接口

**注意:实体类需要继承序列化,不然运行测试会报错**

clipboard.png

Provider,服务的提供者

clipboard.png

  1. 在pom.xml引入依赖,由于需要实现中间方的接口,所以也需要一并引入中间方依赖,这便是为什么要用到maven的父子项目

    <dependency>
                <groupId>denny.dubbo</groupId>
                <artifactId>gmall</artifactId>
                <version>1.0-SNAPSHOT</version>
                <scope>compile</scope>
            </dependency>
    
            <!-- 引入dubbo -->
            <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.6.2</version>
            </dependency>
            <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>2.12.0</version>
            </dependency>
  2. 配置provider.xml文件,用 Spring 配置声明暴露服务
    开发文档是这样描述的:

    <?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://dubbo.apache.org/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
     
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="hello-world-app"  />
     
        <!-- 使用multicast广播注册中心暴露服务地址 -->
        <dubbo:registry address="multicast://224.5.6.7:1234" />
     
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880" />
     
        <!-- 声明需要暴露的服务接口 -->
        <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" />
     
        <!-- 和本地bean一样实现服务 -->
        <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" />
    </beans>

    我的配置:

    <?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://dubbo.apache.org/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
        <!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) -->
        <dubbo:application name="provider"></dubbo:application>
    
        <!-- 2、指定注册中心的位置 -->          
        <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
    
        <!-- 3、指定通信规则(通信协议?通信端口) -->
        <dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
    
        <!-- 4、暴露服务   ref:指向服务的真正的实现对象 -->
        <dubbo:service interface="service.UserService" ref="userServiceImp" ></dubbo:service>
    
        <!-- 服务的实现 -->
        <bean id="userServiceImp" class="service.impl.UserServiceImpl"></bean>
    
        <!-- 监控中心自动注册 -->
        <dubbo:monitor protocol="registry"></dubbo:monitor>
    </beans>
  3. 测试
    新建MainApplication.java,启动项目

    public class MainApplication {
        public static void main(String[] args) throws IOException {
            ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("provider.xml");
            classPathXmlApplicationContext.start();
            System.in.read();
        }
    }

clipboard.png
配置成功

Consumer,服务的消费者

clipboard.png

  1. 同理,引入依赖
  2. 配置consumer.xml,通过 Spring 配置引用远程服务

    <?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://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:component-scan base-package="service.impl"></context:component-scan>
    
        <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
        <dubbo:application name="consumer"></dubbo:application>
    
        <!-- 使用multicast广播注册中心暴露发现服务地址 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
    
        <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
        <dubbo:reference id="userService" interface="service.UserService" />
    
        <dubbo:monitor protocol="registry"></dubbo:monitor>
    </beans>
  3. 测试
    新建MainApplication.java,主要和上方测试一样,不过这里需要调用你的Service方法,启动项目

    public class MainApplication {
        public static void main(String[] args) throws IOException {
            ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
            OrderService orderService = applicationContext.getBean(OrderService.class);
            orderService.initOrder();
            System.out.println("调用完成....");
            System.in.read();
        }
    }
    在控制台有输出便成功,同样可以去注册中心查看  
    

Spring Boot 配置

  1. 依赖

    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>
  2. provider中的service注解配置

    clipboard.png
    @Service是dubbo的注解
    @Component代替Spring boot的Service注解

  3. consumer中的service主动引入

    clipboard.png

  4. 在启动文件中都需要加入@EnableDubbo注解,代表开启Dubbo

仅记录Dubbo入门学习,肯定学习观看开发文档


liudenny
39 声望4 粉丝

小小程序员,大大的梦想