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</ ...
随机推荐
- Rest模式get,put,post,delete含义与区别(转)
POST /uri 创建 DELETE /uri/xxx 删除 PUT /uri/xxx 更新或创建 GET /uri/xxx 查看 GET操作是安全的.所谓安全是指不管进行多 ...
- CSS技巧和经验列表
如何清除图片下方出现几像素的空白间隙? img{display:block;} 如何让文本垂直对齐文本输入框? input{vertical-align:middle;} 如何使文本溢出边界显示为省略 ...
- linux 下tomcat的安装
写在前面: 由于项目使用jdk1.6开发,所以对应服务器应安装jdk1.6和tomcat6 --- 1.环境变量的配置: 打开/etc/bashrc配置环境变量 JAVA_HOME=/usr/apps ...
- 压缩网站的css和js,合并多个文件到一个文件
压缩网站的css和js,合并多个文件到一个文件uglifyjs index.js html5shiv.min.js -o all.min.jsuglifycss index.min.css web.c ...
- 一张图告诉你 canvas 中的 miterLimit 代表着什么
一图胜千言, 图中有一条路径path, 沿着路径描了一条宽度为 width 的边, miterLimit 代表的是, 比例 ab/ac, 其中ac的长度为 1/2 width 来看 mdn 上的描述, ...
- Angular4 后台管理系统搭建(2) - flexgrid 单元格模板 wjFlexGridCellTemplate 的坑
这几天中了很多坑,尤其是两个大坑.先是运行环境的坑,在是flexgrid单元格内部模板的坑.这里记录下. 一开始我遇见一些很奇怪的问题,按网上的说法,别人这么写代码都正常,就在我机器上不正常.按以前的 ...
- 【Android Developers Training】 79. 连接到网络
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- react-router 踩坑记
react-router踩坑分享 背景 辛苦历程 JavaScript动态修改 第一次尝试 第二次尝试 第三次尝试 第四次尝试 总结步骤 其他方案 原理 History 常见的3种History Br ...
- Unity 游戏框架搭建 (二) 单例的模板
上一篇文章中说到的manager of managers,其中每个manager都是单例的实现,当然也可以使用静态类实现,但是相比于静态类的实现,单例的实现更为通用,可以适用大多数情况. 如何设计 ...
- (cljs/run-at (JSVM. :browser) "简单类型可不简单啊~")
前言 每逢学习一个新的语言时总要先了解这门语言支持的数据类型,因为数据类型决定这门语言所针对的问题域,像Bash那样内置只支持字符串的脚步明显就是用于文本处理啦.而数据类型又分为标量类型(Scala ...