dubbo源码之二——dubbo入口】的更多相关文章

dubbo源码版本:2.5.4 dubbo-contaner-api com.alibaba.dubbo.container dubbo-demo-consumer com.alibaba.dubbo.demo.consumer dubbo-monitor-simple com.alibaba.dubbo.monitor.simple dubbo-registry-simple com.alibaba.dubbo.registry.simple dubbo-remoting-api com.al…
@Adaptive注解 在上一篇ExtensionLoader的博客中记录了,有两种扩展点,一种是普通的扩展实现,另一种就是自适应的扩展点,即@Adaptive注解的实现类. @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface Adaptive { String[] value() default {}; } @Adapt…
Dubbo基础二之架构及处理流程概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中架构中,无论是服务提供者还是服务消费者都离不开注册中心,可见注册中心之重要.Redis.Nacos.Zookeeper等这些开源框架均作为Dubbo的注册中心,Dubbo推荐用户使用Zookeeper作为注册中心. 之前文章案例也均使用Zookeeper作为注册中心,所以本文研究注册中心,也就研究Dubbo如何整合Zookeeper并使用.对于Zookeeper,可参考Zookeeper - 随笔…
dubbo的配置其实就是建立在spring的命名空间的配置机制之上的.在dubbo的jar包的META-INF目录下会有spring.handlers这个文件,用来配置spring的命名空间和解析类的对应关系.打开spring.handlers文件,可知dubbo的命名空间配置的处理类为com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler,代码: public void init() { registerBeanDefiniti…
本文将深入分析dubbo的服务发布涉及到的流程及主要类的代码.首先,我们先从类的关系图来看一下dubbo发布服务涉及到的相关类. 1.类图 上图展示了部分服务发布过程中需要使用到的类和接口,其中: spring适配涉及到的类:DubboNamespaceHandler.DubboBeanDefinitionParser.ServiceBean; 配置信息存储:ServicdConfig.RegistryConfig.MonitorConfig.ProtocolConfig.ProviderCon…
做dubbo的配置时很容易发现,dubbo有一套自己的标签,提供给开发者配置,其实每一个标签对应着一个 实体,在容器启动的时候,dubbo会对所有的配置进行解析然后将解析后的内容设置到实体里,最终dubbo会根据实体中的值生成贯穿全局的统一URL.利用自定义标签使配置简单明了化,与spring完美融合. 下面自己写一个自定义标签,主要需要如下 几个步骤: 1.编写实体类 2.编写Parser解析类 3.编写NameSpaceHandle类 4.配置spring.handlers 5.配置spri…
Dubbo协议解码时序图…
Dubbo源码剖析二之注册中心 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中对注册中心进行了简单的介绍,对Dubbo整合Zookeeper链接源码进行了详细分析.本文接着对服务注册过程源码进行分析. 借图说明服务注册(暴露)流程: 利用之前案例跟踪调试分析上述流程的实现,或者验证该流程: 1)ServiceConfig 类拿到对外提供服务的实际类 ref(如:SleepServiceImpl,具体ref相关内容参考Dubbo服务注册到Zookeeper,对外提供服务的实际类 r…
欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 Dubbo 入门之二 --- 项目结构解析 Dubbo 源码分析系列之三 -- 架构原理 技术点 面试中Dubbo负载均衡常问的几点 常见负载均衡算法简介 Dubbo 官方文档介绍 Dubbo 负载均衡的策略 Dubbo 负载均衡源码解析 面试中Dubbo负载均衡常问的几点 谈谈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可能会被面试的面试题,感觉非常不错.如果你基本能回答说明你看懂了dubbo源码,对dubbo了解的足够全面.你可以尝试看能不能回答下.我们一起看下有哪些问题吧? 1.dubbo中"读接口"和"写接口"有什么区别? 2.谈谈dubbo中的负载均衡算法及特点? 3.最小活跃数算法中是如何统计这个活跃数的? 4.简单谈谈你对一致性哈希算法的认识? 5.服务发布过程中做了哪些事? 6.dubbo都有哪些协议,他们之间有什么特点,缺省值是什么? 7.什么是…
前言 虽然标题是dubbo源码解析,但是本篇并不会出现dubbo的源码,本篇和之前的dubbo源码解析-简单原理.与spring融合一样,为dubbo源码解析专题的知识预热篇. 插播面试题 你是否了解spi,讲一讲什么是spi,为什么要使用spi? 对类加载机制了解吗,说一下什么是双亲委托模式,他有什么弊端,这个弊端有没有什么我们熟悉的案例,解决这个弊端的原理又是怎么样的? spi的简单介绍 如果提到api相信大家都知道,spi的话,知道的人就相对少一些. 简单的说,api是给使用者使用的,sp…
一.概述 本篇文章是dubbo SPI源码分析的第二篇,接着第一篇继续分析dubbo SPI的内容,我们主要介绍 getDefaultExtension() 获取默认扩展点方法. 由于此方法比较简单,我们略过示例部分,直接分析源码. 二.源码分析 获取默认扩展方法getDefaultExtension()是一个public.可对外提供调用的方法.我们知道,dubbo中扩展点接口必须要有@SPI注解修饰,@SPI注解代码如下: @Documented @Retention(RetentionPol…
dubbo版本2.6.3 继续之前的dubbo源码阅读,从com.alibaba.dubbo.container.Main.main(String[] args)作为入口 简单的数据一下启动的流程 1.com.alibaba.dubbo.container.Main.main(String[] args)调用 2.加载容器 3.容器遍历,分别start() 4.启动结束 2步骤中的容器加载比较复杂,下面有详细的流程图,最好对着源码看,不然会容易晕 1.ExtensionLoader.getExt…
dubbo版本:2.5.4 2. 服务提供者暴露一个服务的详细过程 上图是服务提供者暴露服务的主过程: 首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化.接下来就是Invoker转换到Exporter的过程. Dubbo处理服务暴露的关键就在Invoker转换到Exporter的…
前情提要 假设你已经知道Dubbo SPI的使用方式,不知道的请出门左转: Dubbo源码(一) - SPI使用 Dubbo源码地址: apache/dubbo 本文使用版本:2.6.x 测试Demo 新建SPI测试接口以及实现类 package com.javaedit.spi; import com.alibaba.dubbo.common.URL; // 定义SPI接口 @SPI public interface Robot { void sayHello(URL url); } // 自…
1. 简介 上一篇文章分析了集群容错的第一部分 -- 服务目录 Directory.服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由.上一篇文章关于服务路由相关逻辑没有细致分析,一笔带过了,本篇文章将对此进行详细的分析.首先,先来介绍一下服务路由是什么.服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者.Dubbo 目前提供了三种服务路由实现,分别为条件路由 ConditionRouter.脚本路由 ScriptR…
一.概述 dubbo SPI 在dubbo的作用是基础性的,要想分析研究dubbo的实现原理.dubbo源码,都绕不过 dubbo SPI,掌握dubbo SPI 是征服dubbo的必经之路. 本篇文章会详细介绍dubbo SPI相关的内容,通过源码分析,目标是让读者能通过本篇文章,彻底征服dubbo SPI. 文章的组织方式是先介绍SPI 的概念,通过Java SPI 让大家了解SPI 是什么,怎么用,有一个初步的概念,dubbo的SPI是扩展了Java SPI的内容,自己实现了一个SPI.…
一.前言 前面讲了服务是如何导出到注册中心的.其实Dubbo做的一件事就是将服务的URL发布到注册中心上.那现在我们聊一聊消费者一方如何从注册中心订阅服务并进行远程调用的. 二.引用服务时序图 首先总的来用文字说一遍内部的大致机制 Actor:可以当做我们的消费者.当我们使用@Reference注解将对应服务注入到其他类中这时候Spring会第一时间调用getObject方法,而getObject中只有一个方法就是get().这里可以理解为消费者开始引入服务了. 饿汉式:在 Spring 容器调…
前面讲过Dubbo SPI拓展机制,通过ExtensionLoader实现可插拔加载拓展,本节将接着分析Dubbo的服务发布过程. 以源码中dubbo-demo模块作为切入口一步步走进Dubbo源码.在 dubbo-demo-provider模块下配置文件 dubbo-demo-provider.xml中定义了服务提供方.注册中心.协议及端口.服务接口等信息,如下: <?xml version="1.0" encoding="UTF-8"?> <b…
Dubbo简介 Dubbo,相信做后端的同学应该都用过,或者有所耳闻.没错,我就是那个有所耳闻中的一员. 公司在好几年前实现了一套自己的RPC框架,所以也就没有机会使用市面上琳琅满目的RPC框架产品. 之所以想好好看看Dubbo,有以下几个原因 公司内部的框架一直在做迭代更新,配置越来越简洁,性能越来越好.但是作为使用者,它就像一个黑盒子,我们无法感知其内部的改动以及实现的原理 现在使用的框架,因为使用了thrift,让平时的开发显得格外的蹩脚,常常在各种model的转换中迷失自我,耗尽了耐心…
叨叨 今天考虑了很久要不要写这篇文章. 距离<Dubbo源码>系列的开篇到现在已经快两个月时间了.当时是想着工作上的RPC框架使用存在一些让人头疼的问题,就来看看Dubbo给出了一套什么样的解决方案. 结果,写完第一篇没几天,工作上因为要赶一个项目的进度,关小黑屋了,前段时间刚放出来-_-! 琢磨着,做事不能半途而废.今天就又打开了Dubbo项目,pull下代码,在十多个子模块之间来回滚动,感觉都不是好惹的,一时不知道从哪下手了.再一想,Dubbo源码系列不能就这么唐突的出一篇就结束了啊. 行…
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了.Dubbo 服务调用过程比较复杂,包含众多步骤.比如发送请求.编解码.服务降级.过滤器链处理.序列化.线程派发以及响应请求等步骤.限于篇幅原因,本篇文章无法对所有的步骤一一进行分析.本篇文章将会重点分析请求的发送与接收.编解码.线程派发以及响应的发…
1.简介 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载"均摊"到不同的机器上.避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况.通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载.在为高负载的服务器分流的同时,还可以避免资源浪费,一举两得.负载均衡可分为软件负载均衡和硬件负载均衡.在我们日常开发中,一般很难接触到硬件负载均衡.但软件负载均衡还是能够接触到一些的,比如 Nginx.在 Dubbo 中,也有负载均衡的概念和相应的实现…
1.服务导出过程 本篇文章,我们来研究一下 Dubbo 导出服务的过程.Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑.整个逻辑大致可分为三个部分,第一是前置工作,主要用于检查参数,组装 URL.第二是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程.第三是向注册中心注册服务,用于服务发现.本篇文章将会对这三个部分代码进行详细的分析,在分析之前,我们先来了解一下服务的导出过程. Dubbo 支持两种服务导出方式,…
欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 博客园 Dubbo 入门之二 --- 项目结构解析 博客园 Dubbo 源码分析系列之三 -- 架构原理 博客园 Dubbo 源码解析四 -- 负载均衡LoadBalance 博客园 下面是个人博客地址,页面比博客园美观一些其他都是一样的 Dubbo 源码分析系列之一环境搭建" Dubbo 源码分析系列之一环境搭建 个人博客地址" Dubbo 入门之二 --- 项目结构解析…
服务端发布流程: dubbo 是基于 spring 配置来实现服务的发布的,对于dubbo 配置文件中看到的<dubbo:service>等标签都是服务发布的重要配置 ,对于这些提供可配置化的支持,spring功不可没,spring提供了可拓展的Schema的支持.也就是自定义标签的使用,这样 dubbo基于这样的规范实现自己的拓展,以至于我们在项目中可以使用dubbo所定义的标签.在实现这个拓展的前提是要把spring的Core包加入项目中.具体的加载在Spring源码深度解析一书中有详细介…
1.怎么将Dubbo源码导入到Eclipse 方法一: 打开Eclipse,File-->Import-->maven-->Exsting Maven Projects,选择dubbo项目即可. 方法二: 1.将下载的Dubbo解压到workSpace中 2.Win + R,进入到dos界面,切换到workSpace中 3.执行:mvn install -Dmaven.test.skip=true 4.创建Eclipse项目文件:mvn eclipse:eclipse 5.使用Eclip…
今天打算来讲一讲 Dubbo 服务远程调用.笔者在开始看 Dubbo 远程服务相关源码的时候,看的有点迷糊.后来慢慢明白 Dubbo 远程服务的调用的本质就是动态代理模式的一种实现.本地消费者无须知道远程服务具体的实现,消费者和提供者通过代理类来进行交互!! 一.JAVA 动态代理 简单看一段代码回顾一下动态代理: public class MyInvocationHandler implements InvocationHandler{ private Object object; publi…
首先Spring要注入自己的bean需要在Spring-provider.xml(提供者spring注入文件,名字可能不一样)添加bean注入,其中有dubbo的自定义标签,xml如何识别这些标签?拿到标签如何注入到Spring Container?一般需要如下几个步骤: 1).设计配置属性和JavaBean 设计属性即dubbo.xsd中的attribute属性,如下 <dubbo:reference timeout="40000" check="false"…