DUBBO的 SPI 方式思考

      Java 的SPI方式可以动态的加载扩展类,但是用法不是很灵活,DUBBO框架因为存在多个扩展点所以实现了自定义的一种扩展方式,也就是实现了作者提到的微核心,插件式的思路。

比如,需要扩展Dubbo的协议,只需在xxx.jar中放置: 
文件:META-INF/services/com.alibaba.dubbo.rpc.Protocol 
内容为:com.alibaba.xxx.XxxProtocol 
Dubbo通过ServiceLoader扫描到所有Protocol实现。 

 

这样的一种扩展思路本身是非常符合OO的思想,如果要扩展一种新的实现,只需要配置和新写实现即可,甚至不需要动原来的jar包,直接放在扩展包。当每一个地方都使用扩展的时候就出现了一种管道式的架构。

 

  

 

           在dubbo框架的每一个有多种实现或者潜在实现的关键点,作者都使用了这种方式,实现了微核心,插件式的开发模式。之前对以微核心这种思想一直理解的不是很深入,看了dubbo后,有了新的认识。此外作者在这些切入点还支持包装和过滤监听等功能,当有个性化的需求的时候是很容易切入这个点。此为为了管理这些扩展点,dubbo实现了一个庞大的工厂类来支持或者和加载这些类,而具体需要使用什么具体扩展实例,都是通过上层传递的参数来确定的。通过这样的设计:

 

             1、实现了微核心。通过这种方式,代码的关键代码非常的少,主流程逻辑非常清楚,在设计最初对细节不是很确定的情况下,但是主要流程固定的情况下可以使用这种方式,将后来的需求作为实现,个人化的需求,可以作为插件的监听或者连接器配置,这样可以使得主流程非常的清晰,也符合OO的思想。

             2、便于测试。因为使用了这样的方式,每个功能点都是扩展,可以针对每个点进行测试,每个组件因为都只承担了一个功能,所以可以针对一个功能点进行测试。

             3、便于扩展,当需需求变化需要变动功能时,可以针对扩展点进行写新的实现。或者开发新的插件,这样不会动到原来的东西。

    总之,dubbo是一个良好的微核心插件式的例子,通过对dubbo的学习,可以领悟这种设计的优点和可扩展性,进而对理解OO思想也很有帮助。

 

时间: 2024-10-31 04:36:26

DUBBO的 SPI 方式思考的相关文章

中国软件和互联网行业未来走向和经营方式思考

本文讲的是中国软件和互联网行业未来走向和经营方式思考,[IT168 资讯](1)在中国的软件和互联网行业,随着云计算的快速发展,我们中国的IT产业会产生新的资源分布和格局重组! 因为:IT的产业链在改变,软件和互联网孕育着更大的机会."云计算"肯定会改变IT业界和整个世界信息化定位. 过去,一家新兴软件公司很难超越IBM.微软.Oracle,SAP这些软件巨头,例如adobe,Landesk等传统IT公司.因为做为领先者微软.Oracle,SAP他们有充足的资金积累,可以不断投资新产品

智慧方式思考智慧城市创建工作

智慧城市是适应时代发展新趋势.推动国家信息化与城镇化同步发展的载体.智慧城市运用现代思维和技术,全方位地提升城市治理水平和服务效率,是城市迈向现代化的一个崭新阶段,是未来城市发展的方向.去年底,中央召开城市工作会议,将推进智慧城市管理作为一项重要内容,并明确提出到2020年,建成一批特色鲜明的智慧城市的目标. 自2013年住建部公布首批90个智慧城市试点开始,全国有近300个城市正在开展智慧城市建设,各地对建设智慧城市的热情很高.从各地的实践来看,必须用"智慧的方式"来思考智慧城市建设

架构师之路-在Dubbo中开发REST风格的远程调用

概述 dubbo支持多种远程调用方式,例如dubbo RPC(二进制序列化 + tcp协议).http invoker(二进制序列化 + http协议,至少在开源版本没发现对文本序列化的支持).hessian(二进制序列化 + http协议).WebServices (文本序列化 + http协议)等等,但缺乏对当今特别流行的REST风格远程调用(文本序列化 + http协议)的支持. 有鉴于此,我们基于标准的Java REST API--JAX-RS 2.0(Java API for REST

dubbo源码分析系列(1)扩展机制的实现

1 系列目录 dubbo源码分析系列(1)扩展机制的实现 dubbo源码分析系列(2)服务的发布 dubbo源码分析系列(3)服务的引用 dubbo源码分析系列(4)dubbo通信设计 2 SPI扩展机制 站在一个框架作者的角度来说,定义一个接口,自己默认给出几个接口的实现类,同时允许框架的使用者也能够自定义接口的实现.现在一个简单的问题就是:如何优雅的根据一个接口来获取该接口的所有实现类呢? 这就需要引出java的SPI机制了 2.1 SPI介绍与demo 这些内容就不再多说了,网上搜一下,一

SEOer要站在搜索引擎的角度去思考

随着搜索引擎被广大网民所接受,搜索引擎已经成为了我们草根站长主要的流量获取方式,通过搜索引擎我们可以推广品牌或网站.SEO也成为广大站长苦苦钻研的一门技术.今天若伊跟大家说说,关于我在学习SEO过程中的一些心得与大家分享. 在我们广大站长在费尽心思的想办法解决文章原创的问题时,百度也在一步一步的完善它的算法,给用户更好的搜索结果.关于文章的伪原创我们不妨站在百度的角度考虑一下这个问题.百度每天海量的抓取网页,对于千篇一律的采集文章,或是伪原创文章,如果全部收录的话.会增加运算负担,或是占用储存资

Maven+SpringMVC+Dubbo+zookeeper 简单的入门demo配置

参考:http://blog.csdn.net/aixiaoyang168/article/details/51362675 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点(其他的详细介绍可以查看dubbo的官网地址http://dubbo.io/,写的很详细!).   该demo是基于maven搭建的,项目架构

如何更好地学习dubbo源代码

很荣幸,作为这样一款业界使用率和好评率出众的RPC框架的维护者,今天这个文章主要是想帮助那些热爱开源的同学,更好的来研究dubbo的源代码.  一.Dubbo整体架构 1.Dubbo与Spring的整合 Dubbo在使用上可以做到非常简单,不管是Provider还是Consumer都可以通过Spring的配置文件进行配置,配置完之后,就可以像使用spring bean一样进行服务暴露和调用了,完全看不到dubbo api的存在.这是因为dubbo使用了spring提供的可扩展Schema自定义配

程序员获取编程灵感的十种方式

有时我会陷入读着编程书但编不了程的陷阱.我不能总是找到一个可工作的有趣项目,即使我知道有大量的机会.如果你有相同的问题,这里的一些提示可能会有所帮助. 1.与其他程序员聊天 这是最好的灵感来源,因为,他们会有一些你想不到的点子.即使是一些程序员朋友.一个编程小组或甚至是一个会议都行.将所有这些想法混合起来肯定会给你一个新的视角. 2.和非程序员一起聊天 首先,在那些让你觉得快乐或挑战思维的人身边,会让人健康,无论他们是否会写代码.第二,他们可以从用户的角度给你灵感.什么会让他们对计算机感到失望?

12个思维导图工具,像数据科学家一样结构化地思考

◆ ◆ ◆ 引言 每个人都能进行全方位的思考,但是,用结构化的方式思考与酝酿使得数据科学家与众不同.在本文中,我们列出了一些对数据科学家来说是很棒的思维导图工具.这些工具提供了用创造性方式产生想法的很好的方法. 让我们从一个数据科学家经常面对的简单小练习开始: 你已经被指定为我们表现最差的店铺的店长,你会在店里做哪些可能的改变? 花几分钟时间仔细想一想.一旦你写下至少几个因素,我们就可以继续下去了. 那么,这个小练习怎么样?容易还是困难?你有多确定你在这个思维捕捉的过程中写下了所有可能的因素?