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)

相关推荐

  • Vue中Watcher和Scheduler的实现原理是什么

    技术Vue中Watcher和Scheduler的实现原理是什么这篇文章主要介绍“Vue中Watcher和Scheduler的实现原理是什么”,在日常操作中,相信很多人在Vue中Watcher和Scheduler的实现原理

    攻略 2021年12月3日
  • 怎么构建nftables

    技术怎么构建nftables这篇文章将为大家详细讲解有关怎么构建nftables,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当前,有一个与 nftables 兼容的 iptables

    攻略 2021年10月26日
  • 如何使用variant代替union

    技术如何使用variant代替union如何使用variant代替union,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。union(联合体

    攻略 2021年11月10日
  • 黄骨鱼的做法,湘菜特色菜干锅黄骨鱼怎么做

    技术黄骨鱼的做法,湘菜特色菜干锅黄骨鱼怎么做主料黄骨鱼的做法:黄骨鱼500克 调料:食盐少许、酱油少许、葱少许、蒜少许、干辣椒少许、生抽少许、香菜少许、植物油适量。 干锅黄骨鱼的做法:
    1.新鲜的黄骨鱼处理干净后,用少

    生活 2021年10月27日
  • 如何解析Java 数据结构中时间复杂度与空间复杂度

    技术如何解析Java 数据结构中时间复杂度与空间复杂度这篇文章给大家介绍如何解析Java 数据结构中时间复杂度与空间复杂度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。算法效率在使用当中,算法效率分

    2021年11月5日
  • 如何利用树莓派监控家里温度和湿度

    技术如何利用树莓派监控家里温度和湿度小编给大家分享一下如何利用树莓派监控家里温度和湿度,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!硬件需求W

    攻略 2021年11月20日