常出现的地方有日志门面接口实现类加载、Spring SPI、JDK SPI、dubbo SPI、hadoop、solr cloud、elasticjob等,这里主要介绍下JDK SPI和dubbo SPI...2. dubbo的SPI机制 dubbo中使用了大量的SPI,如rpc协议(Protocol),过滤器(Filter),序列化(Serialization),底层传输方式(Transporter),代理工厂...ExtensionLoader com.alibaba.dubbo.common.extension.ExtensionLoader是spi拓展加载器。...在ExtensionLoader的源码注释上说明了其在jdk spi上做的几点改进: 自动注入关联扩展点。...总结 这里介绍了jdk spi和dubbo spi的相应机制,通过spi机制极大地提高了接口设计的灵活性,这也是dubbo能够达到高拓展性的一个基础。
dubbo工程模块分包 模块说明: dubbo-common 公共逻辑模块:包括 Util 类和通用模型。...dubbo-remoting 远程通讯模块:相当于 Dubbo 协议的实现,如果 RPC 用 RMI协议则不需要使用此包。...dubbo-config 配置模块:是 Dubbo 对外的 API,用户通过 Config 使用D ubbo,隐藏 Dubbo 所有细节。.../schema/dubbo/dubbo.xsd"> <dubbo
为什么要看源码? 看源码能给我们带来什么? 不看源码会怎么样? 其实一开始大家都是抱着这种心态去干活,甚至是觉得源码看不看都是能做好工作。 但其实反过来想想。...所以,为什么不读源码呢? 读源码不是为了更好的面试,而是为了成为一个更成熟的工程师。 就像你刚刚接手一个庞然大物,你可能只会想着怎么跑起来,但是时间长了,或许你会有兴趣去改变它?...那么,从现在开始,我们从dubbo2.x开始,了解dubbo的初心,也是最核心的功能。 let‘ go!...本栏目,给予dubbo2.x,官方文档开始 文档地址如下: https://dubbo.apache.org/zh/docsv2.7/dev/source/dubbo-spi/
文章目录 什么是SPI机制 SPI示例 Java SPI示例 Dubbo SPI 示例 Dubbo SPI机制源码分析 ExtensionLoader静态类和静态方法 new ExtensionLoader...在 Dubbo 中,SPI 是一个非常重要的模块。基于 SPI,我们可以很容易的对 Dubbo 进行拓展。如果大家想要学习 Dubbo 的源码,SPI 机制务必弄懂。...接下来,我们先来了解一下 Java SPI 与 Dubbo SPI 的用法,然后再来分析 Dubbo SPI 的源码。...Dubbo SPI机制源码分析 SPI机制的实现类是ExtensionLoader;所以主要本篇文章主要分析这个类的源码; ExtensionLoader静态类和静态方法 如果你有留心dubbo使用...是从全局静态变量EXTENSION_LOADERS获取的;但是一开始没有的情况,需要先实例化一个 ExtensionLoader扩展加载器 出来 new ExtensionLoader(type) ; 为了方便分析源码
首先,我们知道dubbo在以前都是基于zookeeper作为配置中心的,同时是建立在spring基础之上的。...因此,就需要思考一些问题: 首先dubbo是怎样和spring集成的,也即dubbo集成在spring上需要具备什么条件?...接着dubbo作为一个服务治理的微服务框架,那它的生产者和消费者与注册中心怎样进行交互的。 dubbo是基于spring的基础之上进行开发的RPC框架。...的入口--dubbo-config-spring。...{ static { Version.checkDuplicate(DubboNamespaceHandler.class); } //找到入口,解析Dubbo
前言 由于明天还要加班(心疼自己一秒),之前答应过小伙伴每周更新一篇dubbo的源码解析的,鉴于上次讲到了集群容错的总体架构,这次主要讲讲第一个关键词 directory,这个内容不多,比较适合这种时间比较紧的分享....后面还会陆续分享dubbo源码解析系列,但是不止于dubbo....接口的实现类,他主要有两个实现类,一个是 StaticDirectory,一个是 RegistryDirectory 其实这个也是道很好的面试题,他还是可以区分三种人 一种是停留在使用层面的,没看过源码的...directory的实现类都是动态变化的 Directory 代表多个 Invoker,可以把它看成 List,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更 第三种则是有看过源码的
Dubbo限流 Dubbo的限流作用于提供方。可以在高并发的情况,保证系统的稳定性、安全性。避免让系统被流量压垮,导致整体服务不可用。..." version="1.0" delay="5000" filter="tps"> 添加filter及dubbo paramter,表示每tps.interval的时间间隔内,能执行...源码 令牌桶算法 Dubbo默认使用令牌桶算法实现限流。某段时间内,桶里面只能放进n个令牌,然后来一个请求就减少一个令牌,如果桶里面的令牌没有了,则不能继续执行请求。...限流通过com.alibaba.dubbo.rpc.filter.TpsLimitFilter实现。
前言 终于到了集群容错中的最后一个关键词,也就是 LoadBalance(负载均衡),负载均衡必然会涉及一些算法.但是也不用太担心,算法这个词虽然高大上,但是算法也有简单和复杂之分.既然是源码解析类的文章...为了方便大家找到前几篇dubbo集群容错的文章,这里做一下小的目录跳转,后面会再弄一篇专门的目录 dubbo源码解析-集群容错架构设计 dubbo源码解析-directory dubbo源码解析...-router dubbo源码解析-cluster 插播面试题 为了能够带着面试题去看文章,我把这个插播面试题的环节放在了前面比较显眼的位置 谈谈dubbo中的 负载均衡算法及特点 最小活跃数算法中是如何统计这个活跃数的...中,如果没有配置 dubbo:reference的 actives属性,默认是调用前活跃数+1,调用结束-1,鉴于很多人可能没用过这个属性,所以我把文档截图贴出来 另外如果使用该种负载均衡算法,则 dubbo...="hash.arguments" value="0,1" /> 缺省用 160 份虚拟节点,如果要修改,请配置 <dubbo:parameter key="hash.nodes" value="320
-----------学习dubbo源码,能给你带来什么好处?...----------- 1.提升SOA的微服务架构设计能力 通过读dubbo源码是一条非常不错的通往SOA架构设计之路,毕竟SOA的服务治理就是dubbo首先提出来的,比起你去看市面上的SOA微服务架构的书籍...2.提升自己在部门团队的技术影响力 你所在的部门团队如果使用了dubbo框架,必然需要懂dubbo底层核心的人;如果你把dubbo源码的架构原理掌握好,一般出现dubbo的疑难杂症,只要你参与探讨和解决...参考实例:深度解剖dubbo源码 http://www.roncoo.com/course/view/90c28309c72d472ab2b58e3802faeba6
,新建文本com.alibaba.dubbo.rpc.cluster.Merger b、映射自定义的merger名称到相应的实现类,如: myMerger=com.patty.dubbo.consumer.service.MyMerger...:method name="test" merger="myMerger"/> (3)同一套代码,分别利用不同的group,把服务发布到注册中心上面。...接下来再看下源码: public Result invoke(final Invocation invocation) throws RpcException { // 获取Directory...return new RpcResult(result); } PS:其实合并方法还有另外一个使用方式,使用".方法名称",并且合并方法只能写在结果类中,这种方式有一个很大的弊端,就是源码中入参固定只有一个...我们来看看源码的实现 ?
getConsumerUrl().getServiceKey() + " on consumer " + NetUtils.getLocalHost() + " use dubbo
1. dubbo源码研究(一) 1.1. dubbo启动加载过程 我们知道,现在流行注解方式,用spring管理服务,dubbo最常用的就是@Reference和@Service了,那么我首先找到这两个实现的地方...可以看到实现方法以BeanPostProcessor结尾,看过spring源码的都知道,这是spring加载过程的一环,具体在哪个过程,可以异步我整理的知识架构之一https://www.processon.com
前言 今天是小长假的倒数第二天,本来国庆是要加班四天的,后来因为要有事要回家才得以幸免,但是后天上班之后都要搬砖搬到手脱皮是必须的了.但是再忙每周一篇源码解析的承诺都依然记得,dubbo系列写完了还有很多系列...为什么呢,因为看书比较系统,而很多博客经常写着写着就断更了,导致这看了一点,那看了一点,最后学得不系统,这个就是学习的大忌.我也希望能改变这个现状,后面有时间整理出一份我自己的 技能图谱和一份 目录.比如 dubbo...另外鉴于也有一些朋友问到我 怎么看源码和 为什么看源码这两个老生常谈的问题....开头,例如 <dubbo:method name="getMenuItems...这个时候面试题就来了,注意我上面提到的 FailfastCluster,面试会问,dubbo中"读接口"和"写接口"有什么区别?
前言 估算了一下, dubbo里面涉及的东西还是比较多的.比如谈到框架的时候,设计模式都是一个老生常谈的话题,再比如我们开发中我们不常用的一些概念, spi、 javassist,以及和zookeeper...相关的一些知识,比如 ZKClient的使用,这些和 dubbo关系很密切,但是这些假如我不做一些前戏铺垫就直接把源码贴出来,那真的没啥意义.因为看源码还是要有一些基础,所以我的目标是,即使看不懂源码,...源码解析-集群容错架构设计中提到这里就暂时不多做叙述 ScriptRouter在 dubbo的测试用例中就有用到,这个类的源码不多,也就124行.引用官网的描述 脚本路由规则 支持 JDK 脚本引擎的所有脚本...如果看过我前两篇dubbo源码解析dubbo源码解析-集群容错架构设计和dubbo源码解析-directory就明白,我的分析过程都是以 官方文档为依据,所以这个问题的答案自然也在官方文档.下面引用一段官网文档的描述...IDEA中 debug查看表达式内容的技巧,比如 router.getUrl()表达式的值,如下图所示 从这里我们看到,此时实现类是 ConditionRouter,由于接下来的逻辑如果直接让大家看源码图可能不够清晰
private String namespace = CommonConstants.DUBBO; //配置中心 group dubbo private String group...key=value&key=value //比如:dubbo://127.0.0.1:20880/com.alibaba.dubbo.demo.DemoService?...ServiceConfig#doExportUrlsFor1Protocol方法: //组装url,url是dubbo配置的载体,通过url可让Dubbo的各种配置在各个模块之间传递。...** * * * </dubbo:reference...url在dubbo中是非常重要的。 一、组装过程: 1.首先添加协议信息,如果协议为空,则默认为dubbo协议 2.添加side信息信息 3.将原来的一些相关的服务提供者信息的map添加到map。
前言 最近因为工作需要在学习Dubbo的各种机制。其中深入学习了一下AbstractRegistry的实现机制。在此根据Dubbo源码对其实现进行一个总结。 Registry是干啥的 ?...首先看一下dubbo最简单的架构图。架构图中一共有五个元素,而Registry类就是对注册中心的抽象。AbstractRegistry是对注册中心的一个抽象的实现。 ?...String filename = url.getParameter(Constants.FILE_KEY, System.getProperty("user.home") + "/.dubbo.../dubbo-registry-" + url.getParameter(Constants.APPLICATION_KEY) + "-" + url.getAddress() + ".cache");
从图中可以看出,他有三个实现类,分别是ConditionRouter,MockInvokersSelector,ScriptRouter
但是对于源码总是狠不下心学习,那么多类,那么多英文注释,吓退我了。最近终于狠下心来一点一点的Debug代码,终于有了点收货,记录下。 Dubbo配置文件Demo Provider配置文件 <dubbo:application name="test-dubbo...熟悉Spring源码的应该知道有一个BeanMap用于存放所有的Bean信息。 ? 到此,配置文件中的service配置终于转化成一个内存中的对象了,也完成了解析的过程。...总结 之前总是狠不下心看源码,难,多,每次都退却了。静下心来跟一下,在熟悉代码的过程中还能学习更多的细节。...阅读源码,在路上,后续还会有~~ 20180901165126238.jpg
微信公众号:[中间件兴趣圈] 作者简介:《RocketMQ技术内幕》作者 本节主要介绍了Dubbo协议的编码方式,涉及协议头、协议体具体的编码规则,默认使用Dubbo协议,其核心类图如下: ?...在Dubbo整个框架中,codec2的可选值为dubbo、thrift,本文将重点分析Dubbo协议的编码解码。...本文主要以Dubbo协议为例进行展开,其他通信方式,例如Thrift就不做过多分析,其实现思路基本是样的,Dubbo协议的编解码实现类为DubboCodec。...TelnetCodec Dubbo telnet协议实现类。 ExchangeCodec:交互层编码器,其他具体协议的基础类,可以看出是业务协议的模板类 DubboCodec:dubbo协议。...既然ExchangeCodec是业务协议,包含Dubbo协议的模板实现类,我们就从ExchangeCodec开始,探究Dubbo编码解码实现原理。
整个Dubbo的负载均衡类图如下所示: ?...上述各种路由负载策略,对应的配置值如下:dubbo-cluster\src\main\resources\META-INF\dubbo\internal\com.alibaba.dubbo.rpc.cluster.LoadBalance...:consumer/>、、的loadbalance属性配置,通常这个属性指定消费端的默认策略...如果各位对其源码实现比较有兴趣的话,可以看接下来的部分,源码分析各种负载算法的具体实现细节。 一致性Hash算法 ?...其配置方式如下: 1 2 3 < dubbo:parameter
领取专属 10元无门槛券
手把手带您无忧上云