Spring Boot整合Dubbo使用及开发笔记
一、概述:
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的配置文件进来。这样做问题
- 和Spring Boot的风格和不搭。如果你使用过mybatis-spring-boot-starter就知道,使用配置文件配置一个框架是那么简单又美妙,mybatis都能为Spring boot写一个starter,dubbo为什么不可呢
- 扩展麻烦。相信使用过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使用及开发笔记的更多相关文章
- Spring Boot 整合 Dubbo和Zookeeper
Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 环境介绍 Zookeeper 安装 启动 Dubbo admin 搭建 创建 ...
- spring boot 整合dubbo
dubbo与springboot的集成和使用dubbo-spring-boot-starter SpringBoot整合Dubbo2.5.10(官方的spring-boot-starter0.1.0) ...
- Spring Boot整合Dubbo框架demo
Dubbo框架原理见之前的博文:http://www.cnblogs.com/umgsai/p/5836925.html 首先启动zookeeper Server端 Pom配置如下 <?xml ...
- spring boot 2.x 系列 —— spring boot 整合 dubbo
文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(boot-dubbo-common) 四. 服务提供者(boot-dubbo-provider) 4.1 提供方配置 4.2 使用注解@Ser ...
- Spring Boot整合dubbo(注解的方式)
一.创建项目 1.创建一个空的项目 2.在空的项目中添加两个Spring Boot模块,如下图所示 二.在provider模块中的pom文件中添加依赖 <dependency> <g ...
- dubbo学习(十)spring boot整合dubbo
工程搭建与配置 生产者 1.创建一个生产者的spring boot工程,配置好依赖,并把接口实现类文件夹复制到新的工程里 2.pom.xml配置dubbo的相关依赖 <!-- Dubbo Spr ...
- spring boot整合mybatis基于注解开发以及动态sql的使用
让我们回忆一下上篇博客中mybatis是怎样发挥它的作用的,主要是三类文件,第一mapper接口,第二xml文件,第三全局配置文件(application.properties),而今天我们就是来简化 ...
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
- Spring Boot和Dubbo整合
provider端 POM依赖 <dependencies> <dependency> <groupId>org.springframework.boot</ ...
随机推荐
- css3特效详解
好吧,CSS3 3D transform变换,不过如此! 这篇文章发布于 2012年09月7日,星期五,01:05,归类于 css相关. 阅读 408042 次, 今日 34 次 一.写在前面的秋裤 ...
- Could not open input file: composer.phar
Yii 2官网推荐用Composer安装框架,但是在本地出错:Could not open input file: composer.phar.后来修改了命令行就ok了,难道是我装的Composer跟 ...
- 从Owin到System.Web.Http.Owin的HttpMessageHandlerAdapter看适配器模式
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- C语言精要总结-指针系列(二)
此文为指针系列第二篇: C语言精要总结-指针系列(一) C语言精要总结-指针系列(二) 指针运算 前面提到过指针的解引用运算,除此之外,指针还能进行部分算数运算.关系运算 指针能进行的有意义的算术运算 ...
- Struts2框架05 result标签的类型
1 result标签是干什么的 就是结果,服务器处理完返回给浏览器的结果:是一个输出结果数据的组件 2 什么时候需要指定result标签的类型 把要输出的结果数据按照我们指定的数据类型进行处理 3 常 ...
- 交叉编译 tesseract
官方参考资料说明: tesseract 依赖库: (https://github.com/tesseract-ocr/tesseract/wiki/Compiling#linux) leptoni ...
- DotNetCore跨平台~Dockerfile的解释
回到目录 大叔感觉网上对Dockerfile的说明不是很清楚,或者说怎么去用说的不清楚,在vs2017里我们可以去建立自己的Dockerfile文件,然后你的项目可以被生成一个镜像,把它推到仓库之后, ...
- 基于封装通用的EF CRUD 的操作
1. Entity Framework是Microsoft的ORM框架,随着 Entity Framework 不断的完善强化已经到达了EF 6.0+ 还是非常的完善的,目前使用的比例相对于其他OR ...
- js 数组里求最大值和最小值
// 数组里相邻两个数做比较 取满足条件的那个(以此类推) var arr = [1,3,4,5,6,7]; function Max(array){ var max = array[0]; for( ...
- 使用Lucene.net+盘古分词实现搜索查询
这里我的的Demo的逻辑是这样的:首先我基本的数据是储存在Sql数据库中,然后我把我的必需的数据推送到MongoDB中,这样再去利用Lucene.net+盘古创建索引:其中为什么要这样把数据推送到Mo ...