
Dubbo学习笔记
文章平均质量分 89
结合Dubbo官网学习总结。
http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
@从入门到入土
学无止境
展开
-
Dubbo 架构设计概览
设计图图示说明图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承.转载 2021-03-25 17:59:03 · 215 阅读 · 0 评论 -
Dubbo入门简介
Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简而言之,dubbo是一个用于远程服务调用的分布式框架,适用于分布式架构中。主要核心包括:一. 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。二. 集群容错:提供基于接口方法的透明远...原创 2018-10-08 22:37:05 · 245 阅读 · 0 评论 -
Dubbo负载均衡
AbstractLoadBalance在 Dubbo 中,所有负载均衡实现类均继承自 AbstractLoadBalance,该类实现了 LoadBalance 接口,并封装了一些公共的逻辑。负载均衡的入口在AbstractLoadBalance的select方法。public abstract class AbstractLoadBalance implements LoadBal...原创 2019-12-16 21:05:00 · 2307 阅读 · 0 评论 -
Dubbo集群容错
Dubbo 定义了集群接口 Cluster 以及 Cluster Invoker 来处理集群容错问题。ClusterCluster接口的实现类有FailoverCluster、FailfastCluster、FailsafeCluster等,其作用都是通过join方法生成对应的invoker。@SPI(FailoverCluster.NAME)public interface Cl...原创 2019-12-14 20:01:29 · 2490 阅读 · 0 评论 -
Dubbo集群概述
在Dubbo体系中,集群模块是服务提供者和服务消费者的中间层,为服务消费者屏蔽了服务提供者的情况,这样服务消费者就可以专心处理远程调用相关事宜。比如发请求,接受服务提供者返回的数据等。集群 Cluster 用途是将多个服务提供者合并为一个 Cluster Invoker,并将这个 Invoker 暴露给服务消费者。这样一来,服务消费者只需通过这个 Invoker 进行远程调用即可,至于具体调用...原创 2019-12-14 18:35:08 · 2699 阅读 · 0 评论 -
Dubbo服务目录
什么是服务目录?引用官网的介绍:服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。通过这些信息,服务消费者就可通过 Netty 等客户端进行远程调用。在一个服务集群中,服务提供者数量并不是一成不变的,如果集群中新增了一台机器,相应地在服务目录中就要新增一条服务提供者记录。或者,如果服务提供者的配置修改了,服务目...原创 2019-12-07 18:44:18 · 4199 阅读 · 0 评论 -
Dubbo服务消费过程
在我们使用dubbo进行远程服务消费时,可以通过@Reference注解或<dubbo:reference>来配置要引用的接口,最终转化成ReferenceBean,这样我们便可以像调用本地接口方法一样使用远程服务提供的功能。在功能实现的背后,dubbo为我们完成了很多复杂的过程:1、生成远程服务的代理。2、获得目标服务的url地址。3、实现远程网络通信。4、...原创 2019-12-05 16:23:23 · 2803 阅读 · 0 评论 -
Dubbo Invoker
Dubbo官网对Invoker进行了说明:Invoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。在服务提供方,Invoker 用于调用服务提供类。在服务消费方,Invoker 用于执行远程调用。Invoker 是由 Protocol ...原创 2019-11-30 17:14:50 · 4620 阅读 · 0 评论 -
Dubbo服务发布过程
在我们对外暴露dubbo服务时,一般使用dubbo提供的@Service注解,或通过XML文件中的<dubbo:service>标签来配置具体的接口属性。dubbo在发布服务前会对指定的包进行扫描,解析出这些属性,将其以ServiceBean的形式保存。ServiceBean除了继承自ServiceConfig,还实现了以下接口:public class ServiceBe...原创 2019-11-26 22:47:51 · 2665 阅读 · 2 评论 -
Dubbo 配置解析
Dubbo的配置是基于Spring自定义标签扩展实现的,例如<dubbo:service>、<dubbo:reference>等。Spring在解析到自定义的namespace标签时,会查找对应的spring.schemas和spring.handlers文件。先看一下dubbo-config/dubbo-config-spring/src/main/resources...原创 2019-11-25 22:11:38 · 2338 阅读 · 0 评论 -
Dubbo getExtension原理
以加载Protocol扩展点为例:ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(DubboProtocol.NAME);getExtensionLoader通过源码可以看到,经过一系列校验后,先尝试从EXTENSION_LOADERS缓存中根据传入的type参数获取对应的loader对象,如果缓存不存在...原创 2019-11-23 22:58:22 · 2455 阅读 · 1 评论 -
Dubbo ExtensionLoader工作流程
ExtensionLoader是Dubbo扩展机制的核心类,其中实现了配置的加载、扩展类的缓存、自适应扩展对象的生成等。ExtensionLoader的逻辑入口可分为getExtension、getAdaptiveExtension、getActivateExtension,分别代表着获取普通扩展类、获取自适应扩展类、获取自动激活扩展类。getExtensiongetExtensi...原创 2019-11-22 11:33:48 · 2116 阅读 · 0 评论 -
Dubbo扩展点注解之@Activate
@Activate称为自动激活扩展点注解,主要使用在有多个扩展点实现、需要同时根据不同条件被激活的场景中,如Filter需要多个同时激活,因为每个Filter实现的是不同的功能。@Activate的参数参数名 效果 String[] group() URL中的分组如果匹配则激活 String[] value() URL中如果包含该key值,则会激活 Strin...原创 2019-11-22 11:31:46 · 13116 阅读 · 2 评论 -
Dubbo扩展点注解之@Adaptive
@Adaptive称为自适应扩展点注解。在实际应用场景中,一个扩展接口往往会有多种实现类,因为Dubbo是基于URL驱动,所以在运行时,通过传入URL中的某些参数来动态控制具体实现,这便是Dubbo的扩展点自适应特性。在Dubbo中,@Adaptive一般用来修饰类和接口方法,在整个Dubbo框架中,只有少数几个地方使用在类级别上,如AdaptiveExtensionFactory和Ada...原创 2019-10-27 00:53:42 · 9367 阅读 · 2 评论 -
Dubbo扩展点注解之@SPI
在Dubbo框架中,@SPI注解都是使用在接口上,它的主要作用是标记这个接口是一个Dubbo SPI扩展点,可以有多个内置或用户定义的实现,运行时通过配置找到具体的实现类。@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})public @interface SPI { /** ...原创 2019-10-26 22:35:10 · 4200 阅读 · 0 评论 -
Dubbo扩展点分类与缓存
Dubbo在加载扩展点时为了提高性能,会将需要Class与实例进行缓存。Class缓存:Dubbo SPI获取扩展类时,会先从缓存中获取,如果缓存中不存在,则加载配置文件配置文件,根据配置把Class缓存到内存中,并不会直接全部初始化。实例缓存:与获取Class相同,每次获取实例的时候,先从缓存中获取,如果获取不到,则重新加载并缓存起来。这也是Dubbo SPI相对Java SPI性能...原创 2019-10-26 18:42:13 · 2225 阅读 · 0 评论 -
JDK SPI与Dubbo SPI的实现
JDK SPISPI全称Service Provider Interface,是提供厂商做插件开发的,如数据库驱动。Java SPI使用了策略模式,一个接口多种实现。同时具体实现不在程序中指定,而是在程序之外的配置文件配置。具体实现过程:1. 新建一个名称为driver的maven工程,定义一个DatabaseDriver接口及对应的方法,打成jar包,供后续实现依赖publ...原创 2019-10-24 15:59:05 · 4599 阅读 · 0 评论