SpringBoot整合Dubbo

前言

  Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

  简单来说,Dubbo 用于分布式的场景。

源码

  GitHub地址:https://github.com/intomylife/SpringBoot

环境

  • JDK 1.8.0 +
  • Maven 3.0 +
  • MySQL 5.6.17
  • SpringBoot 2.0.3
  • ZooKeeper-3.4.5
  • dubbo-admin-2.6.0

开发工具

  • IntelliJ IDEA 
  • Tomcat 8.0

SQL脚本 

  注:这是两个库:base_db 和 user_db

USE base_db;
DROP TABLE IF EXISTS `springboot_base` ;
CREATE TABLE `springboot_base` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `parent_id` bigint(20) unsigned DEFAULT '0' COMMENT '父 id',
	`region_name` varchar(20) DEFAULT NULL COMMENT '地区名',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='地区表';

INSERT INTO springboot_base ( parent_id , region_name )
VALUES ('0','上海市'),('1','嘉定区'),('1','松江区'),('1','黄浦区');
USE user_db;
DROP TABLE IF EXISTS `springboot_user` ;
CREATE TABLE `springboot_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `regoin_id` bigint(20) unsigned DEFAULT '0' COMMENT '地区 id',
	`name` varchar(20) DEFAULT NULL COMMENT '姓名',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='用户表';

INSERT INTO springboot_user ( regoin_id , name )
VALUES (3,'cdy'),(4,'zwc'),(2,'ergouzi');

正文

commons 工程 - POM 文件



    4.0.0

    
    com.zwc
    springboot-dubbo-commons
    0.0.1-SNAPSHOT

    
    springboot-dubbo-commons
    公用工程

    
    jar

    
    
        
        UTF-8
        
        1.8

        
        Cairo-SR3

        
        1.1.9
        
        1.2.47
        1.9.9

        
        3.0-RELEASE
        1.3.2
        1.1.0

        
        0.2.0
    

    
    
        
        
            com.alibaba
            druid-spring-boot-starter
            ${druid.version}
        

        
        
            mysql
            mysql-connector-java
        

        
        
            com.alibaba
            fastjson
            ${fastjson.version}
        
        
            org.codehaus.jackson
            jackson-mapper-asl
            ${jackson.mapper.asl.version}
        

        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            ${mybatis-spring-boot-starter.version}
        
        
            com.baomidou
            mybatis-plus-boot-starter
            ${mybatis-plus-boot-starter.version}
        
        
            org.mybatis.caches
            mybatis-ehcache
            ${mybatis.ehcache.version}
        

        
        
            com.alibaba.boot
            dubbo-spring-boot-starter
            ${dubbo-spring-boot-starter.version}
        
    

    
    
    
    
    
        
            
            
                io.spring.platform
                platform-bom
                ${platform-bom.version}
                pom
                import
            
        
    

    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


  • 配置一些共用依赖,其中包括 dubbo-spring-boot-starter 依赖来整合 Dubbo

commons 工程 - system.properties

# mybatis-plus
## 扫描 mapper 文件
mybatis-plus.mapper-locations=classpath*:com/zwc/*/mapper/xml/*.xml
## 扫描实体类
mybatis-plus.type-aliases-package=com.zwc.*.domain
  • 需要连接数据库,所以依旧配置了 MyBatis-Plus
  • 一些共用配置,不经常修改的,或者是可以统一修改的
  • 这里扫描 Mapper 文件和实体类都用了通配符的方式
  • 比如还可以配置 OSS 的配置信息,Redis 的配置信息,MongoDB 的配置信息等等..

commons 工程 - 自定义配置

package com.zwc.core.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

/*
 * @ClassName MyBatisPlusConfig
 * @Desc TODO   mybatis-plus 配置
 * @Date 2019/4/6 10:21
 * @Version 1.0
 */
@Configuration
@PropertySource("classpath:system.properties")
public class MyBatisPlusConfig {

    /*
     * @ClassName MyBatisPlusConfig
     * @Desc TODO   mybatis-plus 配置拦截
     * @Date 2019/4/6 10:21
     * @Version 1.0
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置方言
        paginationInterceptor.setDialectType("mysql");
        return paginationInterceptor;
    }

}
  • 注意这里在注入类的时候,还要加载自定的配置文件,因为 SpringBoot 不会默认加载 system.properties
  • 配置了 MyBatis-Plus 的分页插件,方言为 MySQL

commons 工程 - 项目结构 

SpringBoot整合Dubbo_第1张图片

 

service 工程 

service 工程是一个父工程,里面包含 基础模块,用户模块,每个模块中又会分为 core 和 api

Dubbo 核心角色有:Provider(提供者),Consumer(消费者),Registry(注册中心)

                                 Monitor(监控中心)和 Container(运行容器)

此工程中 base-service 作为 Provider(提供者),user-service 作为 Consumer(消费者)

每个模块的 api(base-service-api / user-service-api)工程中写对外暴露的接口

每个模块的 core (base-service-core / user-service-core)工程中有自己的服务和实现 api 接口的服务

Provider(提供者)

service 工程 - base-service - base-service-core - application.properties 配置文件

# 端口
server.port=8081

# 数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/base_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

# 打印 sql 日志
logging.level.com.zwc.base.mapper=debug

# dubbo 配置
## 注册中心
### 注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
## 提供方
### 提供方的项目名称
dubbo.application.name=springboot-dubbo-base-service
## 超时时间
dubbo.consumer.timeout=100000
## dubbo
### dubbo 的名称
dubbo.protocol.name=dubbo
### dubbo 的端口(-1 表示随机端口号)
dubbo.protocol.port=-1
  • base-service 工程连接的 base_db 数据库
  • 在 springboot-dubbo-base-service-core 工程的 resources 文件夹下有 application.properties 和 test_base.yml 文件
  • SpringBoot 会默认读取加载 resources 文件夹下的 application.properties 和 application.yml 文件里的配置信息
  • 源码中两种方式都有配置,效果一致;想使用哪种配置就把名称改成 application
  • 如果使用 .yml 文件,注意 .yml 文件需要去掉注释

service 工程 - base-service - base-service-api

  api 接口

package com.zwc.base.api;

import com.zwc.base.dto.response.SpringbootBaseResponseDTO;

import java.util.List;

/**
 * @ClassName SpringbootBaseApi
 * @Desc TODO   地区表 服务类
 * @Date 2019/4/6 14:19
 * @Version 1.0
 */
public interface SpringbootBaseApi {

    // 获取全部地区
    List getAllBase();

}
  •  对外暴露的接口

service 工程 - base-service - base-service-core

  api 接口实现类

package com.zwc.base.api.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.zwc.base.api.SpringbootBaseApi;
import com.zwc.base.dto.response.SpringbootBaseResponseDTO;
import com.zwc.base.service.SpringbootBaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @ClassName SpringbootBaseApiImpl
 * @Desc TODO   地区表 服务实现类
 * @Date 2019/4/6 14:25
 * @Version 1.0
 */
@Service(interfaceClass = SpringbootBaseApi.class)
public class SpringbootBaseApiImpl implements SpringbootBaseApi {

    @Autowired
    private SpringbootBaseService springbootBaseService;

    /*
     * @ClassName SpringbootBaseApiImpl
     * @Desc TODO   获取全部地区
     * @Date 2019/4/6 14:28
     * @Version 1.0
     */
    @Override
    public List getAllBase() {
        return springbootBaseService.getAllBase();
    }

}
  • 特别注意 @Service 注解的包是 com.alibaba.dubbo.config.annotation.Service
  • SpringbootBaseApi 类是 base-service-api 工程中的 api 接口
  • springbootBaseService 类是 base-service-core 工程中自己的服务

  service (自己的服务 

package com.zwc.base.service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zwc.base.domain.SpringbootBase;
import com.zwc.base.dto.response.SpringbootBaseResponseDTO;
import com.zwc.base.mapper.SpringbootBaseMapper;
import com.zwc.user.api.SpringbootUserApi;
import com.zwc.user.dto.response.SpringbootUserResponseDTO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName SpringbootBaseService
 * @Desc TODO   地区表 实现服务类
 * @Date 2019/4/6 14:04
 * @Version 1.0
 */
@Service
public class SpringbootBaseService extends ServiceImpl {

    @Resource
    private SpringbootBaseMapper springbootBaseMapper;

    /*
     * @ClassName SpringbootBaseService
     * @Desc TODO   获取全部地区
     * @Date 2019/4/6 14:31
     * @Version 1.0
     */
    public List getAllBase(){
        // 返回
        List result = new ArrayList<>();
        // 调用查询
        List list = super.list(new QueryWrapper<>());
        // 遍历结果
        list.forEach(base -> {
            SpringbootBaseResponseDTO springbootBaseResponseDTO = new SpringbootBaseResponseDTO();
            // 复值
            BeanUtils.copyProperties(base,springbootBaseResponseDTO);
            // 添加到返回集合中
            result.add(springbootBaseResponseDTO);
        });

        // 返回
        return result;
    }

}
  • 特别注意 @Service 注解的包是 org.springframework.stereotype.Service
  • 调用 MyBatis-Plus 的查询方法

   controller(前端控制器)

package com.zwc.base.controller;

import com.zwc.base.dto.response.SpringbootBaseResponseDTO;
import com.zwc.base.service.SpringbootBaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @ClassName SpringbootBaseController
 * @Desc TODO   地区表 前端控制器
 * @Date 2019/4/6 14:41
 * @Version 1.0
 */
@RestController
@RequestMapping("base")
public class SpringbootBaseController {

    @Autowired
    private SpringbootBaseService springbootBaseService;

    /*
     * @ClassName SpringbootBaseController
     * @Desc TODO   获取全部地区
     * @Date 2019/4/6 14:43
     * @Version 1.0
     */
    @RequestMapping("/getAllBase")
    @ResponseBody
    public List getAllBase(){
        return springbootBaseService.getAllBase();
    }

}
  • 使用 @Autowired 注解自动装配自己的服务

  SpringBoot 启动类 

package com.zwc;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/*
 * @ClassName SpringbootDubboBaseServiceCoreApplication
 * @Desc TODO   启动类
 * @Date 2019/4/6 15:12
 * @Version 1.0
 */
@SpringBootApplication(scanBasePackages = "com.zwc")
@MapperScan("com.zwc.base.mapper")
@EnableDubbo
public class SpringbootDubboBaseServiceCoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDubboBaseServiceCoreApplication.class, args);
    }

}
  • 使用 @MapperScan 注解扫描 Mapper 接口
  • @EnableDubbo 注解一定要加,用来开启 Dubbo 服务

 service 工程 - base-service - 启动项目

  注:1. 项目启动前需要启动 zookeeper

         2. 这里简单的体现了 Dubbo 的优势之一,非入侵式 ,高度解耦,不管消费者有没有启动,

             提供者也可以启动起来,调用自己的服务

  1. 端口:8081(具体可以根据自己的喜好,在 application.properties 配置文件中配置 server.port) 
  2. 查询全部地区信息接口:http://localhost:8081/base/getAllBase 

 

Consumer(消费者)

service 工程 - user-service - user-service-core - POM 文件



    4.0.0

    
    
        com.zwc
        springboot-dubbo-user-service
        0.0.1-SNAPSHOT
    

    
    com.zwc
    springboot-dubbo-user-service-core
    0.0.1-SNAPSHOT

    
    springboot-dubbo-user-service-core
    用户服务工程 - 核心

    
    jar

    
    
        ${project.artifactId}
    

    
    
        
        
            com.zwc
            springboot-dubbo-commons
            0.0.1-SNAPSHOT
        

        
        
            com.zwc
            springboot-dubbo-user-service-api
            0.0.1-SNAPSHOT
        
        
            com.zwc
            springboot-dubbo-base-service-api
            0.0.1-SNAPSHOT
        
    

    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


  • 需要引入 base-service-api 接口工程

service 工程 - user-service - user-service-core - application.properties 配置文件

# 端口
server.port=8082

# 数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/user_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

# 打印 sql 日志
logging.level.com.zwc.user.mapper=debug

# dubbo 配置
## 注册中心
### 注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
## 提供方
### 提供方的项目名称
dubbo.application.name=springboot-dubbo-user-service
## 超时时间
dubbo.consumer.timeout=100000
## dubbo
### dubbo 的名称
dubbo.protocol.name=dubbo
### dubbo 的端口(-1 表示随机端口号)
dubbo.protocol.port=-1
  • user-service 工程连接的 user_db 数据库
  • 在 springboot-dubbo-user-service-core 工程的 resources 文件夹下有 application.properties 和 test_base.yml 文件
  • SpringBoot 会默认读取加载 resources 文件夹下的 application.properties 和 application.yml 文件里的配置信息
  • 源码中两种方式都有配置,效果一致;想使用哪种配置就把名称改成 application
  • 如果使用 .yml 文件,注意 .yml 文件需要去掉注释

service 工程 - user-service - user-service-core

  service (自己的服务 

package com.zwc.user.service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zwc.base.api.SpringbootBaseApi;
import com.zwc.base.dto.response.SpringbootBaseResponseDTO;
import com.zwc.user.domain.SpringbootUser;
import com.zwc.user.dto.response.SpringbootUserResponseDTO;
import com.zwc.user.mapper.SpringbootUserMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName SpringbootUserService
 * @Desc TODO   用户表 实现服务类
 * @Date 2019/4/6 15:16
 * @Version 1.0
 */
@Service
public class SpringbootUserService extends ServiceImpl {

    @Resource
    private SpringbootUserMapper springbootUserMapper;

    // 引入 base - service 工程的接口
    @Reference
    private SpringbootBaseApi springbootBaseApi;

    /*
     * @ClassName SpringbootUserService
     * @Desc TODO   获取全部用户
     * @Date 2019/4/6 15:18
     * @Version 1.0
     */
    public List getAllUser(){
        // 返回
        List result = new ArrayList<>();
        // 调用查询
        List list = super.list(new QueryWrapper<>());
        // 遍历结果
        list.forEach(user -> {
            SpringbootUserResponseDTO springbootUserResponseDTO = new SpringbootUserResponseDTO();
            // 复值
            BeanUtils.copyProperties(user,springbootUserResponseDTO);
            // 添加到返回集合中
            result.add(springbootUserResponseDTO);
        });

        // 返回
        return result;
    }


    /*
     * @ClassName SpringbootUserService
     * @Desc TODO   获取全部地区(调用 base - service 接口)
     * @Date 2019/4/6 15:36
     * @Version 1.0
     */
    public List getAllBase(){
        // 调用 base - service 工程的接口
        List result = springbootBaseApi.getAllBase();
        // 返回
        return result;
    }

    /*
     * @ClassName SpringbootUserService
     * @Desc TODO   获取全部用户详情信息
     * @Date 2019/4/6 23:11
     * @Version 1.0
     */
    public List> getDetailInfo(){
        // 返回对象
        List> result = new ArrayList<>();
        // 调用查询 获取全部用户信息
        List userList = super.list(new QueryWrapper<>());
        // 调用接口 获取全部地区信息
        List baseList = springbootBaseApi.getAllBase();

        // 遍历所有用户
        userList.forEach(user -> {
            // 一个用户存一个 map
            Map map = new HashMap<>();
            map.put("id",user.getId());
            map.put("name",user.getName());
            // 遍历所有地区
            baseList.forEach(base -> {
                if(user.getRegoinId() == base.getId()){
                    map.put("area",base.getRegionName());
                }
            });
            // 放入返回集合对象中
            result.add(map);
        });

        // 返回结果
        return result;
    }

}
  • 特别注意 @Service 注解的包是 org.springframework.stereotype.Service
  • 特别注意 @Reference 注解的包是 com.alibaba.dubbo.config.annotation.Reference;
  • 使用 @Reference 注解到 Dubbo 中引入需要的服务

   controller(前端控制器)

package com.zwc.user.controller;

import com.zwc.base.dto.response.SpringbootBaseResponseDTO;
import com.zwc.user.dto.response.SpringbootUserResponseDTO;
import com.zwc.user.service.SpringbootUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * @ClassName SpringbootUserController
 * @Desc TODO   用户表 前端控制器
 * @Date 2019/4/6 15:22
 * @Version 1.0
 */
@RestController
@RequestMapping("user")
public class SpringbootUserController {

    @Autowired
    private SpringbootUserService springbootUserService;

    /*
     * @ClassName SpringbootUserController
     * @Desc TODO   获取全部用户
     * @Date 2019/4/6 15:24
     * @Version 1.0
     */
    @RequestMapping("/getAllUser")
    @ResponseBody
    public List getAllUser(){
        return springbootUserService.getAllUser();
    }

    /*
     * @ClassName SpringbootUserController
     * @Desc TODO   获取全部地区(调用 base - service 接口)
     * @Date 2019/4/6 15:37
     * @Version 1.0
     */
    @RequestMapping("/getAllBaseInUser")
    @ResponseBody
    public List getAllBase(){
        return springbootUserService.getAllBase();
    }

    /*
     * @ClassName SpringbootUserController
     * @Desc TODO   获取全部用户详情信息
     * @Date 2019/4/6 23:18
     * @Version 1.0
     */
    @RequestMapping("/getDetailInfo")
    @ResponseBody
    public List> getDetailInfo(){
        return springbootUserService.getDetailInfo();
    }

}
  • 使用 @Autowired 注解自动装配自己的服务

  SpringBoot 启动类

package com.zwc;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/*
 * @ClassName SpringbootDubboUserServiceCoreApplication
 * @Desc TODO   启动类
 * @Date 2019/4/6 15:12
 * @Version 1.0
 */
@SpringBootApplication(scanBasePackages = "com.zwc")
@MapperScan("com.zwc.user.mapper")
@EnableDubbo
public class SpringbootDubboUserServiceCoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDubboUserServiceCoreApplication.class, args);
    }

}
  • 使用 @MapperScan 注解扫描 Mapper 接口
  • @EnableDubbo 注解一定要加,用来开启 Dubbo 服务

service 工程 - user-service - 启动项目

  注:1. 项目启动前需要启动 zookeeper

         2. 这里简单的体现了 Dubbo 的优势之一,非入侵式 ,高度解耦,不管提供者有没有启动,

             消费者也可以启动起来,调用自己的服务

  1. 端口:8082(具体可以根据自己的喜好,在 application.properties 配置文件中配置 server.port) 
  2. 查询全部用户信息接口:http://localhost:8082/user/getAllUser

 

service 工程 - 启动提供者和消费者

   注:项目启动前需要启动 zookeeper

   1. 启动 SpringbootDubboBaseServiceCoreApplication

端口:8081

接口:http://localhost:8081/base/getAllBase (查询全部地区信息接口,可单独调用)

   2. 启动 SpringbootDubboUserServiceCoreApplication

端口:8082

接口:http://localhost:8082/user/getAllUser(查询全部用户信息接口,可单独调用)

   3. 接口:http://localhost:8082/user/getAllBaseInUser(获取全部地区信息,注意端口为 8082,

在 user-service 工程中调用了 base-service 工程的接口,体现了 Dubbo 的作用)

dubbo-admin:查看服务调用情况(本文文末处有扩展介绍如何在本地启动 dubbo-admin)

当启动了 base-service 后可在 Dubbo Admin 服务中看到一个服务接口,状态为:没有消费者

当再启动 user-service 后可在 Dubbo Admin 服务中看到上面的服务接口被调用了,状态为:正常

service 工程 - 项目结构

SpringBoot整合Dubbo_第2张图片

  • 在 service 总工程中创建了 base-service (基础模块)和 user-service(用户模块)
  • 每一个模块中都包含 api 和 core

把多工程项目使用 IntelliJ IDEA  打开

  1. 把项目从 GitHub 中下载到你的本地
  2. 打开 IntelliJ IDEA 
  3. 点击 File -> Open
  4. 打开你下载到本地的项目目录
  5. springboot-dubbo -> springboot-dubbo-service(选择打开此工程)
  6. 打开 service 工程后
  7. 再次点击 File -> Project Structrue
  8. 选择 Modules,点击 '+' 符号
  9. 点击 Import  Module
  10. 还是打开你下载到本地的项目目录
  11. springboot-dubbo -> springboot-dubbo-commons -> pom.xml
  12. 点击 OK
  13. 点击 Next,Finish
  14. 点击 Apply,OK

扩展

如何在本地启动 dubbo-admin

dubbo-admin 可把注册到 Zookeeper 中的服务更友好的展示出来,可以清楚的观察服务接口的使用情况和状态

  1. 前往 GitHub 中获取源码:https://github.com/apache/incubator-dubbo

  2. 版本有很多,这里选择 2.6.0 版本的(点击 Branch:master -> Tags -> dubbo-2.6.0)

      SpringBoot整合Dubbo_第3张图片

  3. 点击 Clone or download -> Download ZIP,保存到本地

      SpringBoot整合Dubbo_第4张图片

  4. 解压刚刚下载压缩包(incubator-dubbo-dubbo-2.6.0.zip)

  5. 下载 maven 并配置环境变量

  6. 打开 cmd,进入到解压文件 dubbo-admin 目录

假如把文件解压到了 D 盘更目录,步骤为

a) 输入指令 D: ,回车

b) 输入指令 cd incubator-dubbo-dubbo-2.6.0\dubbo-admin,回车

  7. 输入指令 mvn package,如果出现 BUILD SUCCESS 就证明打包成功

  8. 本地打开 此电脑 -> D 盘 -> incubator-dubbo-dubbo-2.6.0 -> dubbo-admin,会看到一个 target 文件夹

  9. 打开 target 文件夹,会看到一个 dubbo-admin-2.6.0.war 文件

 10. 下载或者解压一个新的 Tomcat8,重命名为 tomcat-dubbo

 11. 把步骤 9 中的 dubbo-admin-2.6.0.war 文件复制到步骤 10 中的 tomcat-dubbo/webapps 文件夹中

 12. 打开步骤 10 中的  tomcat-dubbo/bin,双击 startup.bat 文件启动 tomcat(执行此步骤时最好启动 zookeeper)

 13. tomcat 启动成功后,访问地址:http://localhost:8080/dubbo-admin-2.6.0/

 14. 进入时需要输入用户名密码,默认都为 root

 15. 成功进入 Dubbo Admin 的界面如下

SpringBoot整合Dubbo_第5张图片

 


结语

  到此 SpringBoot 整合 Dubbo 就结束了,注意几个关键的点,多多尝试,一定会成功的!

 

希望能够帮助到你

over

 

 

 

你可能感兴趣的:(SpringBoot)