Spring-Boot 2.1.6集成Dubbo 2.7.3(Zookeeper注册中心)

前言

因项目需要RPC,又要重启时隔一年多未使用的Dubbo,逛了逛官网,现在最新版本已经是2.7.4。由于Dubbo贡献给Apache之后,里面很多集成依赖(2.7.X)都发生了改变,
比如:dubbo-admin从项目独立出来,依赖包别称由com.alibaba.dubbo更变为org.apache.dubbo,特别苦恼的是在集成Spring,不通版本之间特别容易出现不兼容,并且网上教程大多停留在捐赠之前,就是说apache-dubbo的集成文档不是很丰富,本次集成搭建基于apache-dubbo2.7.3版本。

搭建步骤

集成版本

  • JAVA 1.8
  • Dubbo 2.7.3
  • Spring-Boot 2.1.6
  • Dubbo-Spring-Boot 2.7.3
    由于各个版本的依赖相差太大,如果使用的Dubbo版本低于2.7.0,可以参考如下:
Dubbo Spring Boot Dubbo Spring Boot
0.2.1.RELEASE 2.6.5+ 2.x
0.1.2.RELEASE 2.6.5+ 1.x

添加依赖

      
      <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starterartifactId>
          <version>2.1.6.RELEASEversion>
      dependency>

      
      <dependency>
          <groupId>org.apache.dubbogroupId>
          <artifactId>dubbo-spring-boot-starterartifactId>
          <version>2.7.3version>
      dependency>
      
      <dependency>
          <groupId>org.apache.dubbogroupId>
          <artifactId>dubbo-registry-zookeeperartifactId>
          <version>2.7.3version>
      dependency>

由于注册中心使用的是Zookeeper,该服务有三个方式:

  1. 企业提供
  2. 自行安装 可以参考kafka2.0系列之(3) 基于Centos7.6安装Zookeeper
  3. ZooKeeperServerMain 可以参考kafka2.0系列之(3) 基于Centos7.6安装Zookeeper
    spring-boot-dubbo-dependency

项目结构

新建spring-boot-dubbo工程,采用Maven多模块进行管理,里面包括三个子模块:

  • dubbo-api:对外服务接口
  • dubbo-provider:提供者(接口的实现)
  • dubbo-consumer:消费者

截图如下:
Spring-Boot 2.1.6集成Dubbo 2.7.3(Zookeeper注册中心)_第1张图片

dubbo-api 模块

编写 DemoService 接口

/**
 * 对外服务接口
 * @author terry
 * @since 14/10/2019
 */
public interface DemoService {

    String sayHello(String name);

}

dubbo-provider 模块

  1. 实现 DemoService 接口

    /**
     * @author terry
     * @since 14/10/2019
     */
    @Service(version = "${demo.service.version}")
    public class DemoServiceImpl implements DemoService {
    
        @Value("${dubbo.application.name}")
        private String serviceName;
    
        @Override
        public String sayHello(String name) {
            return String.format("[%s] : Hello, %s", serviceName, name);
        }
    }
    
  2. 编写Spring Boot引导程序

    /**
     * 提供者启动类
     * @author terry
     * @since 14/10/2019
     */
    @EnableDubbo
    @SpringBootApplication
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class);
        }
    }
    
  3. 配置 application.properties :

    spring.application.name=demoService-provider
    
    zookeeper.host = xx.xxx.xxx.xxx
    zookeeper.port = 2181
    
    # Dubbo Application
    dubbo.scan.base-packages=cn.littleterry.provider.service.impl
    dubbo.application.name=${spring.application.name}
    demo.service.version=1.0.0
    ## Dubbo Protocol
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=-1
    ## Dubbo Registry
    dubbo.registry.address=zookeeper://${zookeeper.host}:${zookeeper.port}
    dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
    

dubbo-consumer 模块

  1. 通过 @Reference 注入 DemoService :

    /**
     * 消费者启动类
     * @author terry
     * @since 14/10/2019
     */
    @SpringBootApplication
    public class ConsumerApplication {
        private final Logger logger = LoggerFactory.getLogger(getClass());
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    
        @Reference(version = "${demo.service.version}")
        private DemoService demoService;
    
        @Bean
        public ApplicationRunner runner() {
            return new ApplicationRunner() {
                @Override
                public void run(ApplicationArguments args) throws Exception {
                    logger.info(demoService.sayHello("terry"));
                }
            };
        }
    }
    
  2. 配置 application.yml :

    spring:
      application:
        name: demoService-consumer
    
    demo:
      service:
        version: 1.0.0
    
    zookeeper:
        host: xx.xxx.xxx.xxx
        port: 2181
    
    dubbo:
      registry:
        protocol: zookeeper
        check: false
        address: zookeeper://${zookeeper.host}:${zookeeper.port}
        file: ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
    
    

测试

  1. 启动提供服务方引导类ProviderApplication
    Spring-Boot 2.1.6集成Dubbo 2.7.3(Zookeeper注册中心)_第2张图片

  2. 启动消费服务方引导类ConsumerApplication
    Spring-Boot 2.1.6集成Dubbo 2.7.3(Zookeeper注册中心)_第3张图片

dubbo-admin

dubbo-admin是用一个可视化组件用来管理dubbo服务,组件实现:前端Vue 以及后端Spring-boot

详情可以参考dubbo-admin 开发文档

源码

Spring-Boot 2.1.6集成Dubbo 2.7.3(Zookeeper注册中心)_第4张图片

关注微信公众号:"牧羊人影视" 回复:10001

后记

何为Dubbo?

  • 一款分布式服务框架
  • 高性能和透明化的RPC远程服务调用方案
  • SOA服务治理方案

Dubbo 架构原理

Spring-Boot 2.1.6集成Dubbo 2.7.3(Zookeeper注册中心)_第5张图片

Spring—Boot—Dubbo集成中,服务流向?

Spring-Boot 2.1.6集成Dubbo 2.7.3(Zookeeper注册中心)_第6张图片

Spring Cloud比Dubbo好吗?

我的理解:没有可比性,Dubbo只是一个RPC框架,在微服务领域中也是如此。

参考文章

  • Dubbo官网
  • Dubbo Quick start
  • dubbo-spring-boot-project
  • Dubbo admin

你可能感兴趣的:(Web开发)