dubbo可以支持哪些注册中心(dubbo的注册中心有哪些类型)

技术Dubbo注册中心是怎么设计的本篇内容主要讲解“Dubbo注册中心是怎么设计的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Dubbo注册中心是怎么设计的”吧!关于源码和

本文主要讲解“Dubbo注册中心是如何设计的”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你了解“杜博注册中心是如何设计的”!

关于源代码和原理的分析,我们都需要找到一个切入点。找到切入点的前提是你要知道注册中心的功能是什么。注册中心相信大家都很熟悉。每个通用注册中心需要提供两个基本功能点:

服务提供商向注册中心注册他们公开的服务。

服务消费者可以从注册中心获得他们需要的服务。

首先我们需要确定一下Dubbo的源码包的位置关于注册表:org.apache.dubbo.registry我们来看一下包的目录结构图:

Dubbo注册中心是怎么设计的

上面红框中的9个包对应的是Dubbo中9种注册表的实现,包的名称也可以展示注册表实现的具体方式。其中,Dubbo官网推荐的注册中心实施的是基于ZooKeeper的注册中心。然后我们来分析一下基于ZooKeeper的注册表是如何在Dubbo中实现的。

Dubbo注册中心设计

其实在学习开源框架的过程中,我们除了学习它们的使用之外,还可以通过分析源代码来学习这些开源框架的设计。每个开源框架的实现基本上都是可扩展的,这个易于扩展的特性得益于优秀的设计模式。让我们来看看在注册中心的实现中,Dubbo是如何设计来支持各种注册中心的。

00-1010 SPI(服务提供者接口)是Java提供的一种服务发现机制。SPI是使用一个具体的接口实现类,在运行时动态替换接口。

Java中的具体实现非常简单。你只需要定义一个接口,然后用一个具体的实现类实现这个接口,然后在META-INFO/services中创建一个以接口的全限定名命名的文件,其内容就是具体接口实现类的全限定名。

java中有一个java.util.ServiceLoader,可以找到服务的具体实现。

SPI

Dubbo没有直接使用Java的原生SPI,而是重新实现了一套更强大的SPI机制。duospi的相关逻辑封装在ExtensionLoader类中。具体分析请参考官网。在这里,我们将简单解释扩展类动态替换的基本过程。

首先,您需要获取ExtensionLoader实例(调用ExtensionLoader。GetExtensionLoader (classtype)),其中type是接口类。

通过ExtensionLoader实例调用getExtension(String name)方法获取具体实例(name是在Dubbo中配置的扩展类的键值)。在这一步中,首先从缓存中获取具体的扩展类实例,然后直接返回(这意味着扩展类实例已经被加载)。如果没有,则需要创建(调用createExtension(String name)方法)并存储在缓存中(这一步采用双检测锁,避免并发问题,具体编写请参考源代码)

在创建实例之前,我们首先需要找到具体的实现类(getExtensionClasses()。get(name))根据名称对应对应的扩展类。为了找到具体的实现类,我们首先需要获取应用程序中所有扩展类的具体实现类(getExtensionClasses())。

获取之前,先检查类型表示的接口Class上是否有@SPI标注,如果有,分析并缓存缺省键(即@ SPI标注的值),然后加载特定扩展类的实现类,基于缓存获取特定扩展类的实现类。如果发现可以从缓存中获取一个实现类的集合,则直接返回,否则需要加载应用程序中所有扩展类的具体实现类并存储在缓存中,关键是文件。

在第二步中,传入的名称值从映射中获取类。如果获取的值为空,将引发异常;否则,它将会成功。

获取特定类后,首先验证该类的特定对象是否已经缓存在缓存中,如果没有,创建一个新对象并缓存。

获取具体扩展实现类的对象后,我们需要使用反射赋值(调用injectExtension方法)来注入依赖,这部分函数需要依赖Dubbo IOC函数。

Dubbo SPI

Dubbo首先通过反射获取所有setter方法,然后通过ExtensionFactory获取依赖对象,最后通过反射调用将依赖关系设置到目标对象中。ExtensionLoader中使用的ExtensionFactory是AdaptiveExtensionFactory,在AdaptiveExtensionFactory中维护了一个扩展工厂列表,用于存储其他类型的扩展工厂。Dubbo目前提供两种扩展工厂,即ExtensionFactory和SpringExtensionFactory。前者用于创建自适应扩展,后者用于从Spring的IOC容器中获取所需的扩展。

至此,相信大家对“Dubbo注册中心是如何设计的”有了更深的理解,让我们在实践中去做吧!这是网站。更多相关内容,可以去相关渠道查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147024.html

(0)

相关推荐

  • 笑的种类,笑的学问和笑的种类有多少

    技术笑的种类,笑的学问和笑的种类有多少笑 心理学家们现在发现笑的种类:笑是人类与他人交流的最古老的方式之一,而在此之前,笑只被看作是人类幽默感的体现。人类笑是为了和别人团结一致或者嘲笑他们,要么用笑和别人调情。我们中的每

    生活 2021年10月20日
  • m是什么,“S”和“M”是什么意思

    技术m是什么,“S”和“M”是什么意思S是施虐症:指中世纪法国一个侯爵叫做萨德m是什么,他在生活中喜欢对女性施加虐待,在他的作品中有大量性变态行为的描述,所以后来的学者把主动的虐待症,也就是喜欢虐待别人,命名为萨德现象(

    生活 2021年10月23日
  • 抖音刷赞软件网站,下单平台业务秒刷网?

    技术抖音刷赞软件网站,下单平台业务秒刷网?对抖音创始人来说,不断更新高质量的原创作品是非常必要的。早期的短视频作品通过短视频吸引了大量的粉丝关注,其最终目的是使粉丝量不断增长,再通过短视频的带货或直播的带货来获取一定的收

    测评 2021年10月20日
  • 鸟加几是什么字,请问:鸟字下面加个几字读什么

    技术鸟加几是什么字,请问:鸟字下面加个几字读什么是鸟加几是什么字:凫【fú】一、凫的释义:
    1、野鸭。
    2、凫水,游泳。
    二、凫的组词:
    凫茈、凫水、化凫、凫羽、蹑凫、凫骑、凫花、凫泛、凫翁、松凫、玉凫、凫乙、白凫、鱼凫

    生活 2021年10月28日
  • 1立方米等于多少立方厘米,一立方厘米等于多少立方米

    技术1立方米等于多少立方厘米,一立方厘米等于多少立方米1立方厘米=0.000001立方米1立方米等于多少立方厘米。立方厘米和立方米都是体积单位,常用的体积单位有:立方米、立方分米、立方厘米等。计算容积一般用容积单位,如升

    生活 2021年10月28日
  • 手把手带你刷二叉树,第一期)

    技术手把手带你刷二叉树,第一期) 手把手带你刷二叉树(第一期)https://labuladong.gitee.io/algo/2/18/21/读完本文,你不仅学会了算法套路,还可以顺便去 LeetCo

    礼包 2021年11月12日