一、概述:

Spring Dubbo是我开发的一个基于spring-boot和dubbo,目的是使用Spring boot的风格来使用dubbo。(即可以了解Spring boot的启动过程又可以学习一下dubbo的框架)

项目介绍(欢迎Star):

github: https://github.com/Athlizo/spring-dubbo-parent

码云:  https://git.oschina.net/null_584_3382/spring-dubbo-parent

虽然这个开发完成已经有段时间,但是还没来得及写一个总结性的文章,下面就总结一下这个框架开发中的一些关键点和心得吧。

二、痒点

单独启动一个dubbo服务可以使用dubbo的com.alibaba.dubbo.container.Main,如果要在Spring Boot上启动,其实和使用Spring启动是没有任何不一样的,都是通过@importResource一个Dubbo的配置文件进来。这样做问题

  1. 和Spring Boot的风格和不搭。如果你使用过mybatis-spring-boot-starter就知道,使用配置文件配置一个框架是那么简单又美妙,mybatis都能为Spring boot写一个starter,dubbo为什么不可呢
  2. 扩展麻烦。相信使用过Dubbo的大部分都用过Filter这个扩展吧,这里的问题就是读取扩展的SPI文件必须在指定目录下,代码中写死的,如果能像Spring MVC中的Filter一样直接定义一个Spring Bean就可以完成很方便?

基于以上2个比较痒的地方,就促使我研究一下dubbo源码和Spring boot源码。写出一个整合jar包。

三、难点

开发过程中有2个我认为比较难的地方,或者说比较关键的地方

3.1 Dubbo的初始化

首先要了解Dubbo初始化过程中做了什么,因为Dubbo也有Spring容器启动的方式。因此可以参看Dubbo启动过程中怎么使用Spring容器加载Bean的。可以参考这篇文章https://my.oschina.net/u/3039671/blog/856577 。

3.2 如果使用Spring Boot来初始化Dubbo

首先要了解一些Spring Boot初始化过程做了些什么、Bean是怎么初始化的、以及如果Spring boot启动过程中定制化一些东西,例如@Provider和@Serivce(注:这2个是dubbo中的注解)者2个注解处理(查看github 项目中的com.lizo.spring.dubbo.boot.context.AnnotationBeanPostProcessor这个类,这个类大多是对Dubbo中的AnnotationBean进行了2个功能点的修改)。

3.3 怎么把自己的Filter加入到Dubbo Invoker调用链中

因为Dubbo调用时候会也是通过一个Invoker Chain, 而定义一个Dubbo Filter类似在这个调用链中加一个节点。Dubbo管理各种扩展点是通过ExtensionLoader来管理的(参考dubbo源码),因此要把我们新加入的Filter扩展点加入到ExtensionLoader中去,可以参看github项目中的com.lizo.spring.dubbo.extension.context.ExtensionBeanPostProcessor 类的实现

3.4 实现一个开关注解

SpringBoot一些扩展功能中大多通过一个@EnableXXX来开启,例如@EnableRetry ,@EnableMVC 等等,那么如何实现一个@EnableDubbo这样的注解,来达到dubbo功能开启和配置呢,可以参考github项目中的com.lizo.spring.dubbo.boot.config.AnnotationBeanDefinitionRegistrar类实现

4 后记

虽然很多人看了之后都会说,使用xml配置也能达到这个效果。是的,就在前面说的一样,这只是一个痒点,但每个人的对痒点的忍受程度不一样。并且,完成这个功能jar包重要的是其中过程,可以学习到编程的一些技巧,并且对好的框架的内部源码的阅读就像去探索一个新世界一样。在读的过程中会有很多好奇和疑惑的地方,然后看他们是如何解决的,这也是读源码最吸引人的地方。

Spring Boot整合Dubbo使用及开发笔记的更多相关文章

  1. Spring Boot 整合 Dubbo和Zookeeper

    Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 环境介绍 Zookeeper 安装 启动 Dubbo admin 搭建 创建 ...

  2. spring boot 整合dubbo

    dubbo与springboot的集成和使用dubbo-spring-boot-starter SpringBoot整合Dubbo2.5.10(官方的spring-boot-starter0.1.0) ...

  3. Spring Boot整合Dubbo框架demo

    Dubbo框架原理见之前的博文:http://www.cnblogs.com/umgsai/p/5836925.html 首先启动zookeeper Server端 Pom配置如下 <?xml ...

  4. spring boot 2.x 系列 —— spring boot 整合 dubbo

    文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(boot-dubbo-common) 四. 服务提供者(boot-dubbo-provider) 4.1 提供方配置 4.2 使用注解@Ser ...

  5. Spring Boot整合dubbo(注解的方式)

    一.创建项目 1.创建一个空的项目 2.在空的项目中添加两个Spring Boot模块,如下图所示 二.在provider模块中的pom文件中添加依赖 <dependency> <g ...

  6. dubbo学习(十)spring boot整合dubbo

    工程搭建与配置 生产者 1.创建一个生产者的spring boot工程,配置好依赖,并把接口实现类文件夹复制到新的工程里 2.pom.xml配置dubbo的相关依赖 <!-- Dubbo Spr ...

  7. spring boot整合mybatis基于注解开发以及动态sql的使用

    让我们回忆一下上篇博客中mybatis是怎样发挥它的作用的,主要是三类文件,第一mapper接口,第二xml文件,第三全局配置文件(application.properties),而今天我们就是来简化 ...

  8. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  9. Spring Boot和Dubbo整合

    provider端 POM依赖 <dependencies> <dependency> <groupId>org.springframework.boot</ ...

随机推荐

  1. Mybatis在oracle批量更新

    最近公司业务中为了提高效率要做mybatis批量更新,但是到了oracle数据库中做了好几次都没成功,后来发现mybatis最后少了个分号,可能是Mybatis内部做了异常try  catche  处 ...

  2. shell中source与sh区别

    shell中使用source conf.sh,是直接运行conf.sh的命令,不创建子shell,类似与html中include,而sh是则创建子shell, 子shell里面 的变量父shell无法 ...

  3. android studio创建一个最简单的跳转activity

    实现目的:由mainActivity跳转到otherActivity 1.写好两个layout文件,activity_main.xml和otherxml.xml activity_main.xml & ...

  4. iOS 本地视频和网络视频流播放

    需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之 ...

  5. Linux 内核综述

    一.什么是Linux内核: 内核->操作系统中最重要的部分,内核将在系统引导时被装载进RAM,其中包含了很多关键的例程,以操作系统.内核是OS最为关键的部分,人们常将OS(操作系统)与内核等同. ...

  6. Java的数据类型和参数传递

    Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127  (-2^7到2^7-1) sho ...

  7. 学会git玩转github,结尾有惊喜!有惊喜!有惊喜!

    一.什么是Github Github是全球最大的社交编程及代码托管网站(https://github.com/). Github可以托管各种git库,并提供一个web界面(用户名.github.io/ ...

  8. c++ 类的定义和使用

    在 c++ 中 类的定义为 class 类名 { };切记,类的定义完成后要加上分号,这是很多初学者容易犯的错误. 类的成员及函数 分为 public private protect 三类,大家学过 ...

  9. 百度BAE环境搭建

    一.申请 1.http://bce.baidu.com/index.html 2.购买应用引擎BAE需要实名认证:http://console.bce.baidu.com/qualify/#/qual ...

  10. js继承之Object.create()

    通过 Object.create() 方法,使用一个指定的原型对象和一个额外的属性对象创建一个新对象.这是一个用于对象创建.继承和重用的强大的新接口.说直白点,就是一个新的对象可以继承一个对象的属性, ...