Dubbo的注册中心
来源:互联网 发布:域名反解析 编辑:程序博客网 时间:2024/04/29 20:01
注册中心是Dubbo实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储Dubbo发布的
服务信息(譬如提供者url串、路由信息等),Dubbo框架支持多种注册中心,包括zookeeper、redis,但
官方推荐用ZK,本篇以ZK为例分析一下Dubbo框架中的注册中心的运行机制。
一、注册中心概览
(1)、注册中心是什么
通过C/S方式,为客户端提供信息存储、(指定权限下)共享的在线目录服务组件.
(2)、注册中心在Dubbo中的作用
简单的说就是服务的注册和发布,Dubbo在服务发布初始化的时候会将服务相关的信息向注册中心注册,
而引用端在初始化的时候会订阅对注册中心节点内容变更的监听, 看一下细节, 首先注册服务的管理由
dubbo框架中的dubbo-registry模块统一实现, 该模块提供了多种注册中心组件的客户端接入实现,其类图如下
就zookeeper而言, 其ZookeeperRegistry和ZookeeperRegistryFactory是Dubbo对zookeeper操作抽象封装的核心实现,
我们可以简单看一下其实现
这里就是一个简单的工厂模式,没什么复杂的,有兴趣就自己看看吧, 看一下ZookeeperRegistry,
这个地方的实现实际上应用了的模板方法, 实际上Dubbo其他模块使用该类的很多方法都是在其父类中定义的, 譬如register、subscribe等。
(a) 注册 register
其实订阅的过程,就是向注册中心的特定节点(譬如/dubbo)注册节点变更监听器的过程,看一下具体的实现,
其实讲到这细心的读者就回疑惑了,既然是订阅服务,万一在订阅的时候网络异常,订阅失败,然后通信回复后,能不能
恢复本次异常的订阅,想到这里,说明你对框架容灾的意识还是蛮强的,Dubbo提供了这样的机制,我们看一下,这里以
register为例,分析一下 在FailbackRegistry中,定义了一个集合,
private final Set<URL> failedRegistered= new ConcurrentHashSet<URL>(), 用来存储注册失败的服务url,
在FailbackRegistry创建的时候, 会开启一个线程池定时任务, 如图
对于subscribe有相同的实现机制,在这里不在展开讲.另外对于, register、subscribe都有对应的逆向方法
实现 unregister、unsubscribe,由于机制很类似,不在展开讲.
(c) 通知 notify
=====================================================================================================================
和服务注册发布相关的主要的zk操作,大体就这些,现在看看具体的应用
二、Dubbo的注册中心
(1)、发布服务
通过官网的一幅图片,看一下Dubbo服务发布的全过程(对于发布的细节可以参看我以前写过的一篇Dubbo的服务发布),
进入RegistryProtocol的export方法,看一下具体的实现
流程很清晰了,不再详细讲
(2)、引用服务
这个稍微复杂点, 首先有个RegistryDirectory类,它实际上对Registry的具体实现又做了一层封装,然后集成了
一些新的功能譬如路由、映射Invoker等,主要对引用端集群模式提供了底层的支持,这里不再做展开,看一下服务
引用时的订阅和服务端变更通知
每次监控的节点发生变更,则通知 RegistryDirectory中的notify方法, 该方法会重新去刷新缓存,更新本地的关联Invoker映射信息.
好了,先啰嗦到这儿了!
尊重每一个坚持改变, 让现状变得更好的人!!
- Dubbo的注册中心
- Dubbo的注册中心安装
- dubbo支持的注册中心
- 基于ZooKeeper的Dubbo注册中心
- 基于ZooKeeper的Dubbo注册中心
- 基于ZooKeeper的Dubbo注册中心
- 基于ZooKeeper的Dubbo注册中心
- 基于ZooKeeper的Dubbo注册中心
- Dubbo ZooKeeper注册中心的安装
- 基于ZooKeeper的Dubbo注册中心
- 基于ZooKeeper的Dubbo注册中心
- 基于ZooKeeper的Dubbo注册中心
- dubbo的Zookeeper注册中心模式
- Dubbo的注册中心 官方推荐zookeeper
- dubbo容器-注册中心
- Dubbo-注册中心
- Dubbo注册中心
- Dubbo多注册中心
- Android与H5相机、相册笔记
- mysql 绿色版安装图解
- 深入JDBC
- iOS中ARC与MRC代码的兼容
- 全排列算法
- Dubbo的注册中心
- 借助Stetho在Chrome上调试Android网络&数据库
- 爬虫与正则表达式
- 搭建以太坊环境truffle框架时出现的问题
- Codeforces Round #412 D. Dynamic Problem Scoring (枚举 + 贪心)
- 教你一招让你高效搞定高品质的H5交互动画
- PHP随写笔记,类和对象
- 基础Android之访问网络
- 番茄工作法简介