一、概述:

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. Jenkins插件开发

    一.环境配置 不赘述,直接看wiki:https://wiki.jenkins.io/display/JENKINS/Extend+Jenkins 二.内容说明 1.插件代码结构 src/main/j ...

  2. 「七天自制PHP框架」第四天:模型关联

    往期回顾:「七天自制PHP框架」第三天:PHP实现的设计模式,点击此处 原文地址:http://www.cnblogs.com/sweng/p/6624845.html,欢迎关注:编程老头 前阵子在网 ...

  3. Linux常用操作命令(一)

    java程序员要学习一些linux知识 java程序员要学习一些linux知识,下面就是您要学的命令:大型J2EE应用都在建构在linux环境下的.开发环境下我们可以通过samba映射成本地的网络驱动 ...

  4. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!

    小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...

  5. java怎么发http请求

    package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...

  6. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

  7. JQuery实战——页面进度条效果

    今早逛阮一峰大神的博客 ECMAScript 6 入门 时候看到页面顶部有个进度条显示当前浏览的进度,如图: 顶部进度条会根据当前页面高度进行宽度调整,实战一番,视觉使用animated方法实现.下面 ...

  8. BootStrap dateRangePicker时间范围控件

    BootStrap dateRangePicker时间范围控件 1 安装引用 1.1 下载zip Github:https://github.com/dangrossman/bootstrap-dat ...

  9. Bootstrap模态弹出框

    前面的话 在 Bootstrap 框架中把模态弹出框统一称为 Modal.这种弹出框效果在大多数 Web 网站的交互中都可见.比如点击一个按钮弹出一个框,弹出的框可能是一段文件描述,也可能带有按钮操作 ...

  10. VB6之扫雷克星

    很久之前,那时候我还不太会玩(现在也不厉害)扫雷这个游戏,同学总在我面前炫耀自己的技术有多叼.“高级,99颗雷,只需三分钟...”,如此这般.也许确实需要天赋,我总要排查个半天才敢点下左键,然后就BO ...