SpringBoot2快速简单整合Dubbo

一、简介
Apache Dubbo™ 是一款高性能Java RPC框架

Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现,目前流行的SpringBoot微服务亦可以快速整合Dubbo,让我开始快速的搭建起来吧。

二、前提扼要
Dubbo需要一个服务发现的注册中心,你需要自行安装部署以下任何一种即可:

  • Multicast:Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。
  • zookeeper(本文使用):Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用
  • Nacos:Nacos 是 Dubbo 生态系统中重要的注册中心实现,其中 dubbo-registry-nacos 则是 Dubbo 融合 Nacos 注册中心的实现。
  • Redis:基于Redis 实现的注册中心
  • Simple:Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。

三、创建项目工程
这里使用IDEA工具进行搭建,我们需要创建三个项目(module):

  • dubbo-api(java项目即可):定义面向接口的Dubbo服务接口
  • dubbo-provider(SpringBoot项目):作为生产者服务提供接口的实现完成业务
  • dubbo-consumer(SpringBoot项目):作为消费者服务调用生产者提供的接口
    完整工程模块,注意项目模块之间的路径结构,根目录为dubbo-root
    完整工程模块
    1). 新建Empty工程 dubbo-root
    2). 在dubbo-root下创建dubbo-api模块(Java项目)
    	<groupId>com.zookeeper.dubbo.api</groupId>
        <artifactId>dubbo-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    3). 在dubbo-root下创建dubbo-provider模块(SprintBoot项目)
        <groupId>com.zookeeper.dubbo.provider</groupId>
        <artifactId>dubbo-provider</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
    4). 在dubbo-root下创建dubbo-consumer模块(SprintBoot项目)
    	<groupId>com.zookeeper.dubbo.consumer</groupId>
    	<artifactId>dubbo-consumer</artifactId>
     	<version>0.0.1-SNAPSHOT</version>
    
    注意:dubbo-provider模块、dubbo-consumer模块均需要依赖dubbo-api模块

四、项目依赖包
dubbo-provider模块、dubbo-consumer模块均需要依赖包如下(除Springboot基本包外):

		<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.1</version>
        </dependency>
		<!--为本工程依赖项目:dubbo-api-->
        <dependency>
            <groupId>com.zookeeper.dubbo.api</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

五、分别写dubbo-api模块、dubbo-provider模块、dubbo-consumer模块的代码

1). dubbo-api模块

  • 增加DubboService 接口

    package com.zookeeper.dubbo.api;
    
    /**
     * dubbo provider service interface
     * @author xzpdskll
     * @date 2019/6/26
     */
    public interface DubboService {
    
        /**
         * say hello
         * @author xzpdskll
         * @date 2019/6/26
         * @param name
         * @return
         */
        String sayHello(String name);
    }
    
    

2). dubbo-provider模块

  • 增加application.properties配置

    #server.port
    server.port=99
    
    #dubbo-provider.properties
    dubbo.application.name=annotation-provider
    
    #zookeeper address
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880
    
  • 主入口增加@EnableDubbo(scanBasePackages = “你的dubbo接口实现类的包路径”)

    package com.zookeeper.dubbo.provider;
    
    import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    /**
     * dubbo-provider服务提供方SpringBoot主入口
     * @author xzpdskll
     * @date 2019/6/26
     */
    @EnableDubbo(scanBasePackages = "com.zookeeper.dubbo.provider")
    @SpringBootApplication
    public class DubboProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DubboProviderApplication.class, args);
        }
    }
    
  • 增加DubboService接口实现

    package com.zookeeper.dubbo.provider.service.impl;
    
    import com.zookeeper.dubbo.api.DubboService;
    import org.apache.dubbo.config.annotation.Service;
    
    /**
     * dubbo provider service implement
     * @author xzpdskll
     * @date 2019/6/26
     */
    @Service
    public class ProviderServiceImpl implements DubboService {
    
        @Override
        public String sayHello(String name) {
            return "annotation: hello, " + name;
        }
    }
    

    注意:@Service为Dubbo包下的(org.apache.dubbo.config.annotation.Service)

3). dubbo-consumer模块

  • 增加application.properties配置

    #server.port
    server.port=88
    
    #dubbo-consumer.properties
    dubbo.application.name=annotation-consumer
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.consumer.timeout=3000
    
  • 主入口增加@EnableDubbo(scanBasePackages = “你的dubbo接口实现类的包路径”)

    package com.zookeeper.dubbo.consumer;
    
    import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.ComponentScan;
    
    /**
     * dubbo consumer
     * @author xzpdskll
     * @date 2019/6/26
     */
    @EnableDubbo(scanBasePackages = "com.zookeeper.dubbo.consumer")
    @SpringBootApplication
    public class DubboConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DubboConsumerApplication.class, args);
        }
    
    }
    
    
  • 增加DubboConsumerController

    package com.zookeeper.dubbo.consumer.web;
    
    
    import com.zookeeper.dubbo.consumer.service.ConsumerService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * consumer controller
     * @author xzpdskll
     * @date 2019/6/26
     */
    @RestController
    public class DubboConsumerController {
    
        @Autowired
        private ConsumerService consumerService;
    
        @GetMapping("/consumer")
        public String dubbo(){
            return consumerService.invoke("dubbo-consumer");
        }
    }
    
    
  • 增加ConsumerService接口

    package com.zookeeper.dubbo.consumer.service;
    
    /**
     * ConsumerService interface
     * @author xzpdskll
     * @date 2019/6/26
     */
    public interface ConsumerService {
    
        /**
         * invoke provider service
         * @param name
         * @return
         */
        String invoke(String name);
    }
    
    
  • 增加ConsumerService接口实现ConsumerServiceImpl

    package com.zookeeper.dubbo.consumer.service.impl;
    
    import com.zookeeper.dubbo.api.DubboService;
    import com.zookeeper.dubbo.consumer.service.ConsumerService;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.stereotype.Service;
    
    /**
     * consumer service
     * @author xzpdskll
     * @date 2019/6/26
     */
    @Service
    public class ConsumerServiceImpl implements ConsumerService {
    
        @Reference
        private DubboService dubboService;
    
        /**
         * invoke provider
         * @author xzpdskll
         * @date 2019/6/26
         * @param name
         * @return
         */
        @Override
        public String invoke(String name) {
            return dubboService.sayHello(name);
        }
    }
    

六、启动项目访问

  • 启动Zookeeper服务,地址:127.0.0.1:2181
  • 启动dubbo-provider模块SpringBoot服务,地址:127.0.0.1:99
  • 查看zookeeper的znode情况,发现存在ZNode:/dubbo/com.zookeeper.dubbo.api.DubboService,代表已经成功写入
    在这里插入图片描述
  • 启动dubbo-consumer模块SpringBoot服务,地址:127.0.0.1:88
  • 访问:127.0.0.1:88/consumer,返回信息:annotation: hello, dubbo-consumer
    在这里插入图片描述
  • 也可以在dubbo-provider模块实现接口打上断点,查看是否被调用。
  • 有疑问欢迎咨询。

猜你喜欢

转载自blog.csdn.net/xzpdskll/article/details/93748443