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)

相关推荐

  • babel 配置

    技术babel 配置 babel 配置@babel/preset-env
    通过配置 useBuiltIns 参数有三种实现方式
    1. "entry"
    需要在入口文件添加import "core-js",

    礼包 2021年11月26日
  • xamarin开发安卓app教程(xamarin安卓移动开发视频教程)

    技术如何更改Xamarin Android App名称这篇文章将为大家详细讲解有关如何更改Xamarin Android App名称,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。更改X

    攻略 2021年12月21日
  • 如何使用Elastic+logstash+filebeat做Nginx日志分析

    技术如何使用Elastic+logstash+filebeat做Nginx日志分析这篇文章将为大家详细讲解有关如何使用Elastic+logstash+filebeat做Nginx日志分析,小编觉得挺实用的,因此分享给大

    攻略 2021年11月24日
  • Matplotlib可视化最有价值的图表有哪些

    技术Matplotlib可视化最有价值的图表有哪些这篇文章主要为大家展示了“Matplotlib可视化最有价值的图表有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mat

    攻略 2021年12月8日
  • JAVA并发容器有哪些

    技术JAVA并发容器有哪些这篇文章主要介绍“JAVA并发容器有哪些”,在日常操作中,相信很多人在JAVA并发容器有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA并发容器有哪些”

    攻略 2021年11月17日
  • Backbone.js Wine Cellar中CRUD的示例分析

    技术Backbone.js Wine Cellar中CRUD的示例分析小编给大家分享一下Backbone.js Wine Cellar中CRUD的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!您

    攻略 2021年11月24日