随笔分类 -  Dubbo

摘要:走到了这一步也挺不容易的,把之前的暴露入口代码再列出来回顾一下: 下面列出具体dubbo协议的暴露源码 (即 Exporter<?> exporter = protocol.export(invoker)): 注1: key的格式: gruop/serviceName:version:port 阅读全文
posted @ 2018-01-07 18:00 杭州胡欣 阅读(1182) 评论(0) 推荐(0) 编辑
摘要:dubbo服务的本地暴露,显然是针对当服务消费者和服务提供者都在同一个jvm的进程内这种场景 。通常是发生在服务之间的调用的情况下。一种情况就是A服务调用B服务的情况,如果A服务和B服务都是在一个线程中进行服务暴露的,就是本地调用。 下面先看本地暴露的源码: <T> Invoker<T> getIn 阅读全文
posted @ 2017-12-11 14:00 杭州胡欣 阅读(998) 评论(0) 推荐(0) 编辑
摘要:本文紧接上文,doExportUrls()方法位于ServiceConfig类中,代码入口如下: 这样在一个比较宏观的粒度已经看明白了服务暴露,如果想深入请进入下一级分析。 下面以默认的dubbo协议,注册中心为zookeeper来分析 doExportUrlsFor1Protocol(protoc 阅读全文
posted @ 2017-12-06 17:25 杭州胡欣 阅读(1331) 评论(0) 推荐(0) 编辑
摘要:在doExport方法中,对要暴露的服务进行了一系列的检查,检查provider,application,module,registries,monitor这些参数是否为空,是否是GenericService类型的服务,检查要注册的bean的引用和方法等。在方法的最后会调用doExportUrls方 阅读全文
posted @ 2017-10-16 17:50 杭州胡欣 阅读(1171) 评论(3) 推荐(0) 编辑
摘要:ServiceConfig类中的export()方法,是dubbo服务暴露的入口方法,被触发的时机有两个: 1. spring容器初始化完成所有的bean实例后,通过事件机制触发 2. 实现InitializingBean的方法中进行触发 export()方法源码如下: 通过查看源码可知,expor 阅读全文
posted @ 2017-10-16 10:28 杭州胡欣 阅读(725) 评论(0) 推荐(0) 编辑
摘要:ServiceBean的afterPropertiesSet方法是实现了InitializingBean,还是准备先做宏观分析,然后再做细致分析。下面先宏观分析: 通过上面的分析对整个方法在做什么有了大致的了解, 下面进行细致分析,对里面的一段段代码分别展开分析: 1 . 获取Provider配置 阅读全文
posted @ 2017-09-27 17:15 杭州胡欣 阅读(1210) 评论(0) 推荐(0) 编辑
摘要:从上文中可知,com.alibaba.dubbo.config.spring.ServiceBean类是负责解析<dubbo:service/>的配置的,下面是它的类图 从类图上可知它继承了ServiceConfig类,并实现了5个接口,在这5个接口中有两个接口与服务暴露有关Initializing 阅读全文
posted @ 2017-09-26 17:51 杭州胡欣 阅读(532) 评论(0) 推荐(0) 编辑
摘要:dubbo的配置其实就是建立在spring的命名空间的配置机制之上的。在dubbo的jar包的META-INF目录下会有spring.handlers这个文件,用来配置spring的命名空间和解析类的对应关系。打开spring.handlers文件,可知dubbo的命名空间配置的处理类为com.al 阅读全文
posted @ 2017-09-25 17:49 杭州胡欣 阅读(1150) 评论(0) 推荐(0) 编辑
摘要:在 ExtensionLoader 类的loadFile方法中有下图的这段代码: 类如现在这个ExtensionLoader中的type 是Protocol.class,也就是SPI接口的实现类中XxxProtocol类中有这样的构造函数 public XxxProtocol ( Protocol 阅读全文
posted @ 2017-09-22 17:51 杭州胡欣 阅读(923) 评论(0) 推荐(0) 编辑
摘要:总结: 1. 获取某个SPI接口的adaptive实现类的规则是: (1)实现类的类上面有Adaptive注解的,那么这个类就是adaptive类 (2)实现类的类上面没有Adaptive注解,但是在方法上有Adaptive注解,则会动态生成adaptive类 2 .生成的动态类的编译类是:com.alibaba.dubbo.common.compiler.support.AdaptiveCompiler类 3. 动态类的本质是可以做到一个SPI中的不同的Adaptive方法可以去调不同的SPI实现类去处理。使得程序的灵活性大大提高。这才是整套SPI设计的一个精华之所在 阅读全文
posted @ 2017-09-21 14:30 杭州胡欣 阅读(2536) 评论(0) 推荐(0) 编辑
摘要:ExtensionFactory的源码: ExtensionFactory的作用就类似spring框架中的IOC的作用,正是因为JDK的SPI机制比较简单,所以duboo框架才重写了SPI机制,并实现了IOC和AOP的功能。本篇先介绍它的IOC的功能,根据上篇的分析可知,IOC功能的代码出现在Ext 阅读全文
posted @ 2017-09-20 13:47 杭州胡欣 阅读(2196) 评论(0) 推荐(0) 编辑
摘要:ExtensionLoader类是整个SPI的核心类,每个SPI都会对应一个ExtensionLoader类实例,这个类的构造方法如下: 里面的objectFactory对应的就是ExtensionFactory类的实例,通过源码能发现,ExtensionFactory自身也是一个SPI接口,那么它 阅读全文
posted @ 2017-09-19 17:13 杭州胡欣 阅读(984) 评论(0) 推荐(0) 编辑
摘要:SPI机制中的SPI实现类的读取和预处理是由ExtensionLoader类的loadFile方法来完成的 loadFile方法的作用是读取dubbo的某个SPI接口的spi描述文件,然后进行缓存,缓存,缓存(很重要,说三遍) ,读取的位置是在jar包下的META-INF\dubbo\interna 阅读全文
posted @ 2017-09-18 15:40 杭州胡欣 阅读(1130) 评论(0) 推荐(0) 编辑
摘要:插件机制是Dubbo用于可插拔地扩展底层的一些实现而定制的一套机制,比如dubbo底层的RPC协议、注册中心的注册方式等等。具体的实现方式是参照了JDK的SPI思想,由于JDK的SPI的机制比较简单,满足不了一些复杂的需求,所以dubbo重写了一套SPI机制,实现了类似spring的IOC和AOP的 阅读全文
posted @ 2017-09-14 14:29 杭州胡欣 阅读(961) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示