美文网首页
01 dubbo系列 | dubbo快速入门

01 dubbo系列 | dubbo快速入门

作者: 肖君90 | 来源:发表于2019-05-10 11:13 被阅读0次

    前言

    本文主要对dubbo做一个简介和一个入门实例。

    dubbo是什么?

    Dubbo是阿里巴巴开源的一个高性能的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
    Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

    dubbo官网: http://dubbo.apache.org/zh-cn

    git地址:https://github.com/apache/incubator-dubbo

    谁在使用dubbo?

    参考下图:

    6004-1.895e0428.png

    简单示例

    环境

    • jdk 1.8
    • maven 3.3.9
    • zookeeper 3.4.5:可以是单节点

    该demo使用zookeeper作为注册中心,所以需要前提安装好zookeeper,并启动。

    第一步:创建一个maven项目

    创建一个maven项目,这里项目名为:dubbo-demo,并创建三个Module

    • dubbo-demo-api: 这个模块用于定义接口
    • dubbo-demo-provider: 服务生产者模块
    • dubbo-demo-consumer: 服务消费者模块

    其中dubbo-demo-provider和dubbo-demo-consumer都依赖于dubbo-demo-api模块。

    第二步:配置dubbo-demo的pom文件

    <?xml version="1.0" encoding="UTF-8"?>
    <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>
        <packaging>pom</packaging>
        <modules>
            <module>dubbo-demo-api</module>
            <module>dubbo-demo-provider</module>
            <module>dubbo-demo-consumer</module>
        </modules>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.joyxj</groupId>
        <artifactId>dubbo-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>dubbo-demo</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <dubbo_version>2.7.0</dubbo_version>
            <curator_version>4.0.1</curator_version>
            <zookeeper_version>3.4.13</zookeeper_version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo</artifactId>
                    <version>${dubbo_version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.curator</groupId>
                    <artifactId>curator-framework</artifactId>
                    <version>${curator_version}</version>
                    <exclusions>
                        <exclusion>
                            <groupId>org.apache.zookeeper</groupId>
                            <artifactId>zookeeper</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                    <version>${zookeeper_version}</version>
                    <exclusions>
                        <exclusion>
                            <groupId>io.netty</groupId>
                            <artifactId>netty</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.apache.curator</groupId>
                    <artifactId>curator-recipes</artifactId>
                    <version>4.0.1</version>
                    <exclusions>
                        <exclusion>
                            <groupId>org.apache.zookeeper</groupId>
                            <artifactId>zookeeper</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    其中关于spring boot的配置是可以不需要的,只者笔者当时建项目的时候使用了spring boot而已。

    第三步:dubbo-demo-api配置

    定义二个接口DemoService和UserService。

    package com.joyxj.dubbo.demo.api;
    
    /**
     * 测试接口类
     *
     * @author xiaoj
     * @version 1.0
     * @date 2019-04-11
     */
    public interface DemoService {
    
        /**
         * 测试方法
         * @param name 名称
         * @return String
         */
        String sayHello(String name);
    }
    
    
    package com.joyxj.dubbo.demo.api;
    
    /**
     * 用户信息接口
     *
     * @author xiaoj
     * @version 1.0
     * @date 2019-04-11
     */
    public interface UserService {
        /**
         * 获得年龄
         * @param name
         * @return
         */
        String getAge(String name);
    }
    
    

    这里定义了二个接口,主要是为了更好的看后面如何配置dubbo而已,定义一个接口也是可以的。其中一个接口就相当于dubbo的一个服务。

    第四步:dubbo-demo-provider配置

    • pom.xml文件配置
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <parent>
            <artifactId>dubbo-demo</artifactId>
            <groupId>com.joyxj</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>dubbo-demo-provider</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>com.joyxj</groupId>
                <artifactId>dubbo-demo-api</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
            </dependency>
            <!-- zoookeeper的操作工具 -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
            </dependency>
        </dependencies>
    </project>
    
    • 实现dubbo-demo-api中的接口。
    package com.joyxj.dubbo.demo.provider;
    
    import com.joyxj.dubbo.demo.api.DemoService;
    
    /**
     * 【功能描述】
     *
     * @author xiaoj
     * @version 1.0
     * @date 2019-04-11
     */
    public class DemoServiceImpl implements DemoService {
        @Override
        public String sayHello(String name) {
            return "hello, " + name;
        }
    }
    
    
    package com.joyxj.dubbo.demo.provider;
    
    import com.joyxj.dubbo.demo.api.UserService;
    
    import java.util.Random;
    
    /**
     * 【功能描述】
     *
     * @author xiaoj
     * @version 1.0
     * @date 2019-04-11
     */
    public class UserServiceImpl implements UserService {
        @Override
        public String getAge(String name) {
    
            int age = new Random().nextInt(100) + 1;
            return name + " : " + age;
        }
    }
    
    
    • 服务的启动类

    这里我们通过java代码配置dubbo的相关信息。实际生产中用xml文件或properties文件配置。

    package com.joyxj.dubbo.demo.provider;
    
    import com.joyxj.dubbo.demo.api.DemoService;
    import com.joyxj.dubbo.demo.api.UserService;
    import org.apache.dubbo.config.ApplicationConfig;
    import org.apache.dubbo.config.RegistryConfig;
    import org.apache.dubbo.config.ServiceConfig;
    
    /**
     * 启动类
     *
     * @author xiaoj
     * @version 1.0
     * @date 2019-04-11
     */
    public class ProviderApplication {
    
        public static void main(String[] args) throws Exception{
            // 应用配置
            ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-demo-provider");
            // qos是dubbo的运维命令
            applicationConfig.setQosPort(22222);
            // 采用zookeeper作为注册中心
            RegistryConfig registryConfig = new RegistryConfig("zookeeper://localhost:2181");
            // DemoService的配置
            ServiceConfig<DemoServiceImpl> serviceConfig = new ServiceConfig<>();
            serviceConfig.setApplication(applicationConfig);
            serviceConfig.setRegistry(registryConfig);
            serviceConfig.setInterface(DemoService.class);
            serviceConfig.setRef(new DemoServiceImpl());
            serviceConfig.export();
            // UserService的配置
            ServiceConfig<UserService> userServiceServiceConfig = new ServiceConfig<>();
            userServiceServiceConfig.setApplication(applicationConfig);
            userServiceServiceConfig.setRegistry(registryConfig);
            userServiceServiceConfig.setInterface(UserService.class);
            userServiceServiceConfig.setRef(new UserServiceImpl());
            userServiceServiceConfig.export();
            System.in.read();
        }
    }
    
    • 执行ProviderApplication的main方法。

    第五步:dubbo-demo-consumer配置

    • pom文件配置,与dubbo-demo-provider配置基本一样。
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <parent>
            <artifactId>dubbo-demo</artifactId>
            <groupId>com.joyxj</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>dubbo-demo-consumer</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>com.joyxj</groupId>
                <artifactId>dubbo-demo-api</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
            </dependency>
        </dependencies>
    
    
    </project>
    
    • 消费者启动类
    package com.joyxj.dubbo.demo.consumer;
    
    import com.joyxj.dubbo.demo.api.DemoService;
    import com.joyxj.dubbo.demo.api.UserService;
    import org.apache.dubbo.config.ApplicationConfig;
    import org.apache.dubbo.config.ReferenceConfig;
    import org.apache.dubbo.config.RegistryConfig;
    
    /**
     * 消费者
     *
     * @author xiaoj
     * @version 1.0
     * @date 2019-04-11
     */
    public class ConsumerApplication {
    
        public static void main(String[] args) {
            // 应用配置
            ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-demo-consumer");
            // qos是dubbo的运维命令,默认是22222,为了防止与生产者冲突,设置成33333
            applicationConfig.setQosPort(33333);
            // 注册中心配置
            RegistryConfig registryConfig = new RegistryConfig("zookeeper://localhost:2181");
            // DemoService的配置
            ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<>();
            referenceConfig.setApplication(applicationConfig);
            referenceConfig.setRegistry(registryConfig);
            referenceConfig.setInterface(DemoService.class);
            DemoService demoService = referenceConfig.get();
            String msg = demoService.sayHello("xiaojun");
            System.out.println(msg);
            // UserService的配置
            ReferenceConfig<UserService> userServiceReferenceConfig = new ReferenceConfig<>();
            userServiceReferenceConfig.setApplication(applicationConfig);
            userServiceReferenceConfig.setRegistry(registryConfig);
            userServiceReferenceConfig.setInterface(UserService.class);
            UserService userService = userServiceReferenceConfig.get();
            System.out.println(userService.getAge("xiaojun"));
        }
    }
    
    
    • 执行ConsumerApplication的main方法,正确输出。

    相关文章

      网友评论

          本文标题:01 dubbo系列 | dubbo快速入门

          本文链接:https://www.haomeiwen.com/subject/fbbooqtx.html