2.Directory

简介: 本文深入解析Dubbo中Directory接口的两个实现类:StaticDirectory与RegistryDirectory,重点剖析RegistryDirectory如何通过注册中心回调机制动态更新invoker列表,揭示其背后的服务发现与集群容错原理。

首先来看一下directory接口的实现类,他主要有两个实现类,一个是StaticDirectory,一个是RegistryDirectory

其实这个也是道很好的面试题,他还是可以区分三种人

  • 一种是停留在使用层面的,没看过源码的,因此他不会懂得这两个实现类
  • 第二种是看过官网如下描述,因此认为directory的实现类都是动态变化的

Directory 代表多个 Invoker,可以把它看成 List<Invoker> ,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更

  • 第三种则是有看过源码的,其实从StaticDirectory中的Static关键词来看,就知道,这个其实是不会动态变化的,从下图知道,他的Invoker是通过构造函数传入,StaticDirectory用得比较少,主要用在服务对多注册中心的引用

本文介绍的重点是RegistryDirectory,首先来看看他的继承结构

这个NotifyListener中的notify方法就是注册中心的回调,也就是它之所以能根据注册中心动态变化的根源所在.

下面放一个上篇中集群容错的整体架构中的一个图唤醒大家的对Directory记忆

从中可以看出,Directory获取invoker是从methodInvokerMap中获取的,从这个图也可以看出,这些主要都是操作,那它的操作是在什么时候写的呢?就是在回调方法notify的时候操作的



也就是注册中心有变化,则更新methodInvokerMapurlInvokerMap的值(这个后面讲服务引用原理的时候会再提一下),这就是官网提到的它的值可能是动态变化的,比如注册中心推送变更的原因所在.


相关文章
|
2月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1581 9
|
存储 自然语言处理 固态存储
ublk:来自Linux社区的新热点,基于io_uring的全新高性能用户态块设备
如果您想快速了解ublk的意义、作用及性能,请直接看第二节Q&A部分。一、简介用户态块设备,就是提供/dev/ublkbX这样的标准块设备给业务,业务读写这个块的实际IO处理由您编写的用户态的代码决定。这就好比您使用FUSE,所有对挂载于FUSE的目录的读写都是您编写的IO handler来处理一样。使用用户态块设备,您可以方便地向上层业务以块设备/dev/ublkbX的形式提供您的自定义
|
存储 Kubernetes Cloud Native
阿里巴巴开源容器镜像加速技术
近日阿里巴巴开源了其云原生容器镜像加速技术,其推出的overlaybd镜像格式,相比于传统的分层tar包文件格式,实现了基于网络的按需读取,从而使得容器可以快速启动。
|
2月前
|
前端开发 NoSQL Java
3-代码拉取与运行
本文介绍了如何快速部署和启动 JeecgBoot 项目,涵盖代码拉取(在线与离线方式)、数据库脚本导入、Idea 工程配置、后端与前端工程启动等关键步骤,帮助开发者快速搭建本地开发环境。
3-代码拉取与运行
|
2月前
|
JavaScript
1-JeecgBoot介绍
JeecgBoot是一款基于代码生成器的低代码开发平台,采用前后端分离架构,包含SpringBoot2.x、Ant Design&Vue等技术,实现零代码高效开发。
1-JeecgBoot介绍
|
4月前
|
SQL 缓存 Java
Mybatis及MybatisPlus
MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。其系统架构通过 mybatis-config.xml 配置全局信息,结合 mapper.xml 映射 SQL 语句,构建 SqlSessionFactory 并创建 SqlSession 操作数据库。MyBatis 底层通过 Executor 执行器和 Mapped Statement 对象实现 SQL 的输入输出映射与执行。支持复杂结果集映射,
12.服务暴露总结
本文讲解服务暴露的核心原理,区分本地暴露与远程暴露两种方式,并通过图示解析服务从Invoker到Exporter的转换过程,为后续深入学习奠定基础。
12.服务暴露总结
|
2月前
|
前端开发 NoSQL Java
jeecg-boot
JeecgBoot 是一个基于 Spring Boot 和 Vue3 的低代码开发平台,支持快速构建企业级应用。平台提供源码下载、技术架构清晰,涵盖前后端详细配置及代码生成指南。用户可通过 GitHub 获取源码,使用 IDEA 和 WebStorm 开发,结合 MySQL、Redis 等组件实现系统搭建。平台内置代码生成功能,支持表单开发、菜单配置与权限管理,便于快速实现增删改查等业务需求。
 jeecg-boot
|
4月前
|
存储 负载均衡 Java
SpringCloud框架
本文介绍了微服务架构中常用的技术组件与原理,包括Nacos与Eureka的服务注册与发现机制、Nacos的分级存储模型、OpenFeign的远程调用流程、Ribbon与Spring LoadBalancer的负载均衡策略、Hystrix与Sentinel的限流熔断机制、滑动窗口算法原理,以及Spring Cloud Gateway的路由断言与过滤器功能,全面覆盖微服务核心治理能力。