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



(b)  订阅 subscribe

    其实订阅的过程,就是向注册中心的特定节点(譬如/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映射信息.

 好了,先啰嗦到这儿了!


尊重每一个坚持改变, 让现状变得更好的人!!


0 0
原创粉丝点击