本章我们将分析一下consumer向注册中心注册,并获取服务端相应的信息,根据这些信息生产代理对象的过程和源码. 1.类图 上图展示了部分消费者注册及生成代理对象过程中需要使用到的类和接口,其中: spring适配涉及到的类:DubboNamespaceHandler.DubboBeanDefinitionParser.ReferenceBean; 配置信息存储:ReferenceConfig.RegistryConfig.MonitorConfig.ProtocolConfig.Consume…
Dubbo源码剖析二之注册中心 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中对注册中心进行了简单的介绍,对Dubbo整合Zookeeper链接源码进行了详细分析.本文接着对服务注册过程源码进行分析. 借图说明服务注册(暴露)流程: 利用之前案例跟踪调试分析上述流程的实现,或者验证该流程: 1)ServiceConfig 类拿到对外提供服务的实际类 ref(如:SleepServiceImpl,具体ref相关内容参考Dubbo服务注册到Zookeeper,对外提供服务的实际类 r…
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分析4-基于netty的dubbo协议的server dubbo源码分析5-dubbo的扩展点机制 dubbo源码分析6-telnet方式的管理实现 在duboo源码分析1-reference bean创建 分析了reference bean的创建之后,这里分析怎么拿这个创建出来的bean发起服务调用…
本文作为dubbo源码分析的第一章,先从总体上来分析一下dubbo的代码架构.功能及优缺点,注意,本文只分析说明开源版本提供的代码及功能. 1.dubbo的代码架构:  spring适配层:常规的spring适配方法,内容包括使用dubbo.xsd文件来定义dubbo相关的元素及属性:DubboNamespaceHandler用来向spring容器注册dubbo的元素解析器:DubboBeanDefinitionParser用来解析具体的dubbo元素. 应用协议层:关于thrift,dubbo…
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了.Dubbo 服务调用过程比较复杂,包含众多步骤.比如发送请求.编解码.服务降级.过滤器链处理.序列化.线程派发以及响应请求等步骤.限于篇幅原因,本篇文章无法对所有的步骤一一进行分析.本篇文章将会重点分析请求的发送与接收.编解码.线程派发以及响应的发…
1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供者.这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用.另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等.为了处理这些问题,Dubbo 定义了集群接口 Cluster 以及及 Cluster Invoker.集群 Cluster 用途是将多个服务提…
1. 简介 上一篇文章分析了集群容错的第一部分 -- 服务目录 Directory.服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由.上一篇文章关于服务路由相关逻辑没有细致分析,一笔带过了,本篇文章将对此进行详细的分析.首先,先来介绍一下服务路由是什么.服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者.Dubbo 目前提供了三种服务路由实现,分别为条件路由 ConditionRouter.脚本路由 ScriptR…
1.服务导出过程 本篇文章,我们来研究一下 Dubbo 导出服务的过程.Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑.整个逻辑大致可分为三个部分,第一是前置工作,主要用于检查参数,组装 URL.第二是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程.第三是向注册中心注册服务,用于服务发现.本篇文章将会对这三个部分代码进行详细的分析,在分析之前,我们先来了解一下服务的导出过程. Dubbo 支持两种服务导出方式,…
Dubbo源码分析1 Dubbo源码分析2 dubbo源码阅读:rpc请求处理流程(1) 架构设计:系统间通信(17)——服务治理与Dubbo 中篇(分析) 13. Dubbo原理解析-注册中心之Zookeeper协议注册中心 dubbo作为消费者注册过程分析 - 邯郸人 Dubbo源码分析(二):Dubbo之消费端(Consumer)   https://www.cnblogs.com/cyfonly/tag/Dubbo/ Dubbo原理和源码解析之“微内核+插件”机制  Dubbo原理和源码…
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分析4-基于netty的dubbo协议的server dubbo源码分析5-dubbo的扩展点机制 dubbo提供了telnet的方式,直接用命令查看服务信息等.怎么实现的呢. 1. 编解码器 com.alibaba.dubbo.remoting.transport.netty.NettyCodecA…
1.简介 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载"均摊"到不同的机器上.避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况.通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载.在为高负载的服务器分流的同时,还可以避免资源浪费,一举两得.负载均衡可分为软件负载均衡和硬件负载均衡.在我们日常开发中,一般很难接触到硬件负载均衡.但软件负载均衡还是能够接触到一些的,比如 Nginx.在 Dubbo 中,也有负载均衡的概念和相应的实现…
使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-router-dom.redux.styled-components)开发的一套博客后台管理系统,用于前端小站的管理,主要功能包括游客浏览.文章管理.类别管理.评论通知.推荐设置和用户管理 [访问地址] 域名:https://admin.xiaohuoch…
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具.首先要说的就是Connector,其作为Service的子容器,承担着http请求的核心功能.那我们先来准备下一啊吧. 我们知道一次网络请求过来之后,从网络的角度来看,是经过物理层→链路层→网络层->传输层->应用层,如下图所示. 我们所熟知的的Socket处于TCP(传输层),操作系统为我们提供…
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分析4-基于netty的dubbo协议的server dubbo源码分析5-dubbo的扩展点机制 dubbo源码分析6-telnet方式的管理实现 值得学习的地方:在reference这一侧是如何做到了对应用透明? 分析代码后不难发现:使用javassist的字节码技术+代理. 这种实现框架对应用透…
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分析4-基于netty的dubbo协议的server dubbo源码分析5-dubbo的扩展点机制 dubbo源码分析6-telnet方式的管理实现 和reference的实现思路略有不同1. 在spring对接这一层略有区别ServiceBean不再是一个bean factory,而是Applica…
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分析4-基于netty的dubbo协议的server dubbo源码分析5-dubbo的扩展点机制 dubbo源码分析6-telnet方式的管理实现 真正的netty server并没有太多的技术含量.主要还是依赖handler的细节处理.…
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分析4-基于netty的dubbo协议的server dubbo源码分析5-dubbo的扩展点机制 dubbo源码分析6-telnet方式的管理实现 说是扩展点 其实有点DI的意思,只是简单的di 大多框架都会造DI的轮子 dubbo这里是,struts2也是. 机制不是很复杂 更全面的思维导图 即 …
1. 简介 在上一篇文章中,我详细的分析了服务导出的原理.本篇文章我们趁热打铁,继续分析服务引用的原理.在 Dubbo 中,我们可以通过两种方式引用远程服务.第一种是使用服务直联的方式引用服务,第二种方式是基于注册中心进行引用.服务直联的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用.因此,本文我将重点分析通过注册中心引用服务的过程.从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,服务消费者还需要经历 Invoker 创建.代理类创建等步骤.这些步骤,我将在后续章节中一…
一.何时创建服务引用 引用官方文档的原话,如果将Dubbo托管在Spring-IOC容器下,Dubbo服务引用的时机有两个,第一个是在Spring容器调用ReferenceBean的afterPropertiesSet方法时引用服务,第二个是在ReferenceBean对应的服务被注入到其他类中时引用.这两个引用服务的时机区别在于,第一个是饿汉式的,第二个是懒汉式的.默认情况下,Dubbo使用懒汉式引用服务.如果需要使用饿汉式,可通过配置 <dubbo:reference> 的init属性开启…
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD…
1. 简介 前面文章分析了服务的导出与引用过程,从本篇文章开始,我将开始分析 Dubbo 集群容错方面的源码.这部分源码包含四个部分,分别是服务目录 Directory.服务路由 Router.集群 Cluster 和负载均衡 LoadBalance.这几个部分的源码逻辑比较独立,我会分四篇文章进行分析.本篇文章作为集群容错的开篇文章,将和大家一起分析服务目录相关的源码.在进行深入分析之前,我们先来了解一下服务目录是什么.服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取…
项目中用的dubbo的挺多的,然后随着自己对dubbo的慢慢深入,自己也希望能够了解dubbo的底层实现,这半年来一直在看dubbo的源码,有点断断续续的,于是准备写一个dubbo源码系列的分析文章,一来方便自己总结,二来也能够让自己的学习有输出分享. 整个系列会从dubbo的xml到bean到生产者启动-注册到消费者订阅-调用的这一主线,然后会穿插一些相关的负载均衡.熔断.过滤器.监控.spi等等.让我们进入一个全新的世界吧,let's go 1.如果你好奇为什么配置了xml文件dubbo就可…
一.什么是SPI SPI全称为Service Provider Interface,是一种服务发现机制,其本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件.这样可以在运行时,动态为该接口替换实现类. JDK提供了默认的SPI实现,但是Dubbo并未使用JDK提供的SPI,而是自己封装了一套.我们先来通过Dubbo官网给的两个例子简单了解下JDK和Dubbo的SPI是如何使用的. 1.1.JDK SPI示例 首先定义一个接口以及它的两个实现类 public interface…
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Module.下图是所有Abp自带的module.AbpModule是所有Module的基类,其已经拥有了IIocManager和IAbpStartupConfiguration的受保护的成员,从其派生的Module都可以直接获取并使用相关的功能(依赖注入,Configuration).: 以下以AbpWe…
1.原理 我在上一篇文章中分析了 Dubbo 的 SPI 机制,Dubbo SPI 是 Dubbo 框架的核心.Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,比如 Protocol.Cluster.LoadBalance 等.有时,有些拓展并非想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载.这听起来有些矛盾.拓展未被加载,那么拓展方法就无法被调用(静态方法除外).拓展方法未被调用,就无法进行加载,这似乎是个死结.不过好在也有相应的解决办法,通过代理模式就可…
1.简介 SPI 全称为 Service Provider Interface,是 Java 提供的一种服务发现机制.SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类.这样可以在运行时,动态为接口替换实现类.正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能.SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件.不过,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其…
ServiceBean的afterPropertiesSet方法是实现了InitializingBean,还是准备先做宏观分析,然后再做细致分析.下面先宏观分析:  public void afterPropertiesSet() throws Exception { if (getProvider() == null) { .............. //获取provider配置 } if (getApplication() == null && (getProvider() == n…
SPI机制中的SPI实现类的读取和预处理是由ExtensionLoader类的loadFile方法来完成的 loadFile方法的作用是读取dubbo的某个SPI接口的spi描述文件,然后进行缓存,缓存,缓存(很重要,说三遍) ,读取的位置是在jar包下的META-INF\dubbo\internal目录下  一. 先对loadFile方法进行下粗的了解: loadFile方法方法被调用的顺序如下: getExtensionClasses() ——> loadExtensionClasses()…
ExtensionLoader加载机制阅读: Dubbo的类加载机制是模仿jdk的spi加载机制:  Jdk的SPI扩展加载机制:约定是当服务的提供者每增加一个接口的实现类时,需要在jar包的META-INF/service/目录下同时创建一个以服务接口命名的具体实现类,该文件里面就是保存的实现该接口的具体实现类.而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类 名,并装载实例化,完成模块的注入. 基于这样一个约定就能很好的找到服…
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationConfigApplicationContext启动原理分析主要分析下面三点 1.@Qualifier与@Primary注解的使用2.BeanFactory与ApplicationContext区别3.AnnotationConfigApplicationContext启动原理分析 1.@Qualifie…