Springboot 2.x 整合Dubbo 2.6.x和Dubbo 2.7.x

一 、Dubbo 是什么?

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:

  • 面向接口的远程方法调用
  • 智能容错和负载均衡
  • 服务自动注册和发现。

二、为什么我要区分 2.6.x 和 2.7.x ?

Dubbo有很长一段时间的发展史,2018年的时候不知道为什么阿里暂更了一年,之后又重新开始更新。之前一直是阿里在维护,后面阿里把它捐给了Apache基金会,由Apache来维护,2.6.x之前,maven中的包名都是alibaba,2.7.0之后包名改成了apache,其中整合入系统中有一些差异;发展史:

  • 2008年,阿里巴巴开始内部使用 Dubbo;
  • 2009年初,发布1.0版本;
  • 2011年10月,阿里巴巴宣布开源,版本为2.0.7;
  • 2014年,当当网 fork 了 Dubbo 版本,命名为dubbox-2.8.0,并支持 HTTP REST 协议;
  • 2014年10月,发布2.3.11版本;
  • 2017年9月,阿里巴巴重启维护,重点升级所依赖的 JDK 及组件版本,发布2.5.4/5版本;
  • 2018年2月,阿里巴巴宣布将 Dubbo 捐献给 Apache,进入 Apache 孵化器;
  • 2018年6月,Apache Dubbo 发布首个加入 Apache 孵化器的版本2.6.2,发展首位committer,来自有赞的@yiji同学;
  • 2018年7月,Dubbo 官方域名更新到 dubbo.apache.org,页面焕然一新,并启 用新 logo,品牌全面升级;
  • 2018年11月,加入孵化器以来,发展来自有赞的 @yiji同学成为首位 PPMC member;
  • 2018年12月,第八届云计算标准和应用大会 ,Dubbo 获得中国优秀开源项目一等奖,同时获得开源中国举办的2018中国优秀开源项目奖,位列排行榜第3;
  • 2019年1月,发布了2.7.0,支持 Java 1.8,包名更改为org.apache,支持 Restful 服务;
  • 2019年1月,Dubbo 社区正式发布 Dubbo Ecosystem, 升级为完整的微服务解决方案;
  • 2019年5月21日,Dubbo 从 Apache 正式毕业。

三、包依赖区别

  • 2.6.x alibaba


    alibaba dubbo-spring-boot-starter的包依赖
  • 2.7.x apache


    apach dubbo-spring-boot-starter的包依赖

从图中可以看出, alibaba包中的starter已经依赖了dubbo、zookeeper、curator、spring-boot-start、dubbo-spring-boot-autoconfigure,而apache的包中只有dubbo-spring-boot-autoconfigure,所以如果使用apache的包的话,需要自行引入dubbo和注册中心的相关包,如果使用的是alibaba的包的话就不需要了。

四、Dubbo项目的基本结构

Dubbo的原理什么的以及它的组成这里就不扯了,直接说说dubbo的项目结构吧。
基本的Dubbo项目组成分为三个部分:

  • 接口层
  • 服务提供层
  • 服务器消费层

五、实现整合

5.1 接口层

接口层这里自定义了接口,实现部分由服务提供层来实现。建议将model也放在接口层中,接口层中对dubbo没有相关依赖,在这里pom就不提供了。

  • 实例
// vo层
@Data
public class UserVO implements Serializable {
    private Integer id;
    private String  userName;
    private Integer age;
}
// service 接口层
public interface IUserAdminService {
    /**
     * 通过用户id获取用户
     * @param userId
     * @return
     */
    UserVO getUserById(String userId);
}

完成之后可以mvn install打包到本地仓库或者打包成jar包供提供者或者消费者使用

5.2 服务提供层 2.6.x

  • pom
      ...
    2.6.x
      <!-- 导入接口依赖 -->
      <dependency>
            <groupId>com.martain.dubbo</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
      </dependency>
      <!-- duboo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
    2.7.x 
       <!-- dubbo -->
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • 服务实现接口
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import service.IUserAdminService;

@Service  // 注意,这个是dubbo包里面的service,不是spring包里面的
@Component
public class UserAdminService implements IUserAdminService {
    @Override
    public UserVO getUserById(String userId) {
        UserVO userVo = ...
        ...
        return userVo;
    }
}
  • 启动类 Application上添加注解
@SpringBootApplication
@EnableDubbo
@MapperScan(basePackages = "com.jhunicom.community.model.mapper")
public class ServerApplication {

    public static void main(String[] args) {
        //如果不需要是web项目
        new SpringApplicationBuilder(ServerApplication.class)
                //非web应用
                .web(WebApplicationType.NONE)
                .run(args);
//       如果是web应用
//        SpringApplication.run(ServerApplication.class,args);
    }
}
  • 配置文件中配置
dubbo:
  application:
    name: dubbo-producer  #dubbo的注册的服务名, 唯一性
    version: 1.0.0  # 服务提供的版本
  registry:
    address: zookeeper://127.0.0.1:2181  # 注册中心的地址
  protocol:
    #协议名称
    name: dubbo
    #服务暴露端口
    port: 20880
  scan:  
    base-packages: com.martain.dubbo.server.service # 接口实现类的包名

5.3 消费者层

  • pom
        2.6.x
      <!-- 导入接口依赖 -->
      <dependency>
            <groupId>com.martain.dubbo</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
      </dependency>
      <!-- duboo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        2.7.x 
       <!-- dubbo -->
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • 远程调用服务
import com.alibaba.dubbo.config.annotation.Reference;
import service.IUserAdminService;
@RestController
public class TestController {
    @Reference  // 使用该注解,dubbo会自动到注册中心寻找服务提供者
    IUserAdminService userAdminService;
    @GetMapping("/user/{userId}")
    public Result getUserById(@PathVariable String userId){
        UserVO userVo = userAdminService.getUserById(userId);
        ...
  • 启动类中添加 @EnableDubbo 注解
@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}
  • 配置文件
dubbo:
  application:
    name: dubbo-consumer  #dubbo的注册的服务名, 唯一性
    version: 1.0.0       # 版本号
  registry:
    address: zookeeper://127.0.0.1:2181 # 配置注册中心

示例源码(待补充)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容