资讯专栏INFORMATION COLUMN

dubbo服务发布二之zookeeper注册

Hegel_Gu / 3180人阅读

摘要:都是持久化节点,服务信息是零时节点,主要是为了监听服务提供方的是否断开连接,做出相应处理。订阅节点红框框里面主要做的时候就是创建服务对应的节点创建节点持久型节点并监听如下节点创建一个的监听器对服务提供者的节点配置监听器。

接着上一篇继续看。
上一篇服务暴露已经讲完RegistryProtocol#doLocalExport的方法了。下面将服务是如何被写到zookeeper上的。

1、注册zookeeper节点,/dubbo/*/providers

RegistryProtocol#getRegistry方法中,从最原始的Invoker里面拿到url,拿到配置的“zookeeper”注册协议,重新构造了一个zookeeper协议的registryUrl,并从registryFactory【一个Adaptive类】中拿到一个ZookeeperRegistryFactory实例。
.]

RegistryFactory$Adpative代码【获取方法:把日志级别调测DEBUG,然后从控制台里面找到该端代码】

package com.alibaba.dubbo.registry;

import com.alibaba.dubbo.common.extension.ExtensionLoader;

public class RegistryFactory$Adpative implements com.alibaba.dubbo.registry.RegistryFactory {
    public com.alibaba.dubbo.registry.Registry getRegistry(com.alibaba.dubbo.common.URL arg0) {
        if (arg0 == null) throw new IllegalArgumentException("url == null");
        com.alibaba.dubbo.common.URL url = arg0;
        String extName = (url.getProtocol() == null ? "dubbo" : url.getProtocol());
        if (extName == null)
            throw new IllegalStateException("Fail to get extension(com.alibaba.dubbo.registry.RegistryFactory) name from url(" + url.toString() + ") use keys([protocol])");
        com.alibaba.dubbo.registry.RegistryFactory extension = (com.alibaba.dubbo.registry.RegistryFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.registry.RegistryFactory.class).getExtension(extName);
        return extension.getRegistry(arg0);
    }
}

执行ZookeeperRegistryFactory#getRegistry【模板设计模式,对不对?!】方法,并调用ZookeeperRegistryFactory#createRegistry,在ZookeeperRegistryFactory已经利用dubbo的IOC原理,注入了一个ZookeeperTransporter,该对象利用Adaptive机制获得一个zookeeper客户端的实例,默认使用zkClinet的实现方式。

拿到ZookeeperRegistry实例之后,执行抽象类方法AbstractRegistryFactory.getRegistry

ZookeeperRegistry#doRegistry方法,将服务信息,写到zk接口上。

/dubbo/com.alibaba.dubbo.demo.DemoService/providers都是持久化节点,服务信息是零时节点,主要是为了监听服务提供方的是否断开连接,做出相应处理。

此时该服务的providers节点已经写完了。

2、订阅/dubbo/*/configrators节点

红框框里面主要做的时候就是

2.1、创建服务对应的/dubbo/*/configrators节点

创建zk节点【持久型节点】、并监听如下节点
/dubbo
----/com.alibaba.dubbo.demo.DemoService
--------/configurators

2.2、创建一个OverrideListener的监听器

对服务提供者的configurators节点配置监听器。
会触发AbstractRegistry#notify(URL url, NotifyListener listener, List urls)去写缓存文件,这个以后会多带带弄讲。

2.3、订阅/dubbo/*/configrators节点,当有变化时,触发OverrideListener监听器,重新执行OverrideListener#notify方法,

首先在服务提供者的节点树中创建configurators节点,然后配置监听器OverrideListener,若通过Dubbo管理系统为服务设置动态参数,则动态配置的参数放在configurators节点目录下,并通知服务端的OverrideListener监听器,根据动态参数重新生成服务提供者URL,若URL有变化则重新暴露服务

3、返回Exporter

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69238.html

相关文章

  • Dubbo 一篇文章就够了:从入门到实战

    摘要:启动容器,加载,运行服务提供者。服务提供者在启动时,在注册中心发布注册自己提供的服务。注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 一 为什么需要 dubbo 很多时候,其实我们使用这个技术的时候,可能都是因为项目需要,所以,我们就用了,但是,至于为什么我们需要用到这个技术,可能自身并不是很了解的,但是,其实了解技术的来由及背景知识,对...

    tomener 评论0 收藏0
  • Dubbo 2.7.1 踩坑记

    摘要:面试题服务提供者能实现失效踢出是什么原理高频题服务宕机的时候,该节点由于是持久节点会永远存在,而且当服务再次重启的时候会将重新注册一个新节点。 Dubbo 2.7 版本增加新特性,新系统开始使用 Dubbo 2.7.1 尝鲜新功能。使用过程中不慎踩到这个版本的 Bug。 系统架构 Spring Boot 2.14-Release + Dubbo 2.7.1 现象 Dubbo 服务者启动...

    wudengzan 评论0 收藏0
  • 基于Dubbo+ZooKeeper的分布式服务的实现

    摘要:调用流程服务容器负责启动,加载,运行服务提供者。服务提供者在启动时,向注册中心注册自己提供的服务。注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。这就是分布式服务注册中心的由来。 Dubbo是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案。这里简单介绍一下RPC,所谓RPC就是远程过程调用,全称为Romate Proce...

    warkiz 评论0 收藏0
  • 基于Dubbo+ZooKeeper的分布式服务的实现

    摘要:调用流程服务容器负责启动,加载,运行服务提供者。服务提供者在启动时,向注册中心注册自己提供的服务。注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。这就是分布式服务注册中心的由来。 Dubbo是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案。这里简单介绍一下RPC,所谓RPC就是远程过程调用,全称为Romate Proce...

    enda 评论0 收藏0

发表评论

0条评论

Hegel_Gu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<