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</ ...
随机推荐
- 【转载】The Elements of Programming Style之代码风格金科玉律
原始日期: 2017-02-06 16:20 <The Elements of Programming Style >是一本很古老的书.尽管 Fortran 我们不太使用,尽管新奇的语言层 ...
- SQL Server事务的隔离级别和锁
背景 当用户并发尝试访问同一数据的时,SQL Server尝试用锁来隔离不一致的数据和使用隔离级别查询数据时控制一致性(数据该如何读取),说起锁就会联想到事务,事务是一个工作单元,包括查 ...
- nginx+ftp搭建图片服务器(Windows Server服务器环境下)
几种图片服务器的对比 1.直接使用ftp服务器,访问图片路径为 ftp://账户:密码@192.168.0.106/31275-105.jpg 不采用这种方式,不安全容易暴露ftp账户信息 2.直接使 ...
- eclipse快捷键 自己使用简单总结
ctrl+shift+O 清理代码引用的多余类 ctrl+shift+R 打开指定文件
- 6.function自定义插件的方法和使用
Smarty插件本质上是一个function函数 有三种类型的插件: function modifier block functions 定义的方法有三种: 1.使用registerPlugin的方法 ...
- VIM基础知识整理(附思维导图)
这是当时初学VIM后做的一个思维导图,图片稍大,所以从freemind导出了html文本po在下面:图片在最下方,放大可清晰浏览. VIM 普通模式 普通编辑命令 功能:浏览,普通编辑 x:删除光标所 ...
- SSIM(结构相似度算法)不同实现版本的差异
前言 最近用ssim测试图片画质损伤时,发现matlab自带ssim与之前一直使用的ssim计算得分有差异,故和同事开始确定差异所在. 不同的SSIM版本 这里提到不同的ssim版本主要基于matla ...
- usaco training 4.1.2 Fence Rails 题解
Fence Rails题解 Burch, Kolstad, and Schrijvers Farmer John is trying to erect a fence around part of h ...
- 结巴(jieba)中文分词及其应用实践
中文文本分类不像英文文本分类一样只需要将单词一个个分开就可以了,中文文本分类需要将文字组成的词语分出来构成一个个向量.所以,需要分词. 这里使用网上流行的开源分词工具结巴分词(jieba),它可以有效 ...
- JSON.parse()与JSON.stringify()的区别
JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name":"goatling"}' //解析 ...