Dubbo的多注册中心配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo的多注册中心配置相关的知识,希望对你有一定的参考价值。

参考技术A 最近项目中用到了Dubbo,Zookeeper,因为底层不同服务之间的调用,涉及到了不同的注册中心。由此写一下关于多注册中心的配置。

SpringBoot框架:

使用yml配置:

dubbo:

    registry:

        protocol: zookeeper

        address: ****.****:2181|****.****:2181

注意:| 竖线分割线就是表示不同的注册中心

dubbo:

    registry:

        protocol: zookeeper

        address: ****.****:2181,****.****:2181

注意:, 逗号表示同一注册中心不同的集群

Spring xml配置

注册到不同的服务中心

<dubbo:registry id="dubbo" address="****.****:2181"/>

<dubbo:registry id="dubbo" address="****.****:2181"/>

个人公号:【排骨肉段】,可以关注一下。

Dubbo源码分析系列---服务的发布

摘要:

   通过解析配置文件,将xml定义的Bean解析并实例化,(涉及重要的类:ServiceBean、RegistryConfig[注册中心配置]、ProtocolConfig[协议配置]、ApplicationConfig[应用配置]),最终向注册中心注册服务提供方的过程。这里我们重点分析provider是如何注册到注册中心的?注册了那些内容?

如何注册到注册中心:

  1、准备工作做好:RegistryConfig、ProtocolConfig、ApplicationConfig类作为ServiceBean的属性存在,在export之前先检查这些属性有没有赋值,没有的话会使用默认的配置实例化并赋值

  2、doExportUrls:组装需要向注册中心注册的URL,根据配置的不同协议(默认dubbo),向注册中心注册相应的地址

private void doExportUrls() {
        List<URL> registryURLs = loadRegistries(true);
        for (ProtocolConfig protocolConfig : protocols) {
            doExportUrlsFor1Protocol(protocolConfig, registryURLs);
        }
    }

   2.1、组装URL:loadRegistries(true)

registry://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?application=demo-provider&dubbo=2.0.0&owner=william&pid=5916&registry=zookeeper&timestamp=1496647142958

   组装完成后的URL就是上面那样。

   2.2、向注册中心注册:

 Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.toFullString()));

                        Exporter<?> exporter = protocol.export(invoker);

     2.2.1、proxyFactory为javassist字节码生成的Adaptive实例,其getInvoker方法通过URL参数调用具体的扩展点(参见扩展点自适应),并调用扩展点的getInvoker方法。

     2.2.2、protocol也是动态生成的Adaptive实例,因为Url中的protocol属性为Registry,所以具体的扩展点实现是RegistryProtocol,又因为Protocol实现了装饰器模式,

     ProtocolListenerWrapper,ProtocolFilterWrapper是装饰器模式的2个实现。所以export的调用过程如下:

     ProtocolFilterWrapper.export()--》ProtocolListenerWrapper.export()--》RegistryProtocol.export()

     wapper类只是方便我们自己做些额外的处理,最终向注册中心注册的过程在RegistryProtocol中。

     2.2.3、在2.2.2步骤中实例化RegistryProtocol后,会检查属性中是否有启用扩展点加载的,有则一并创建对应属性的Adaptive实例。

              A、doLocalExport:创建ExchangeServer绑定回调,开启Netty连接,保持通信。

              B、register:向注册中心注册临时节点:(节点名)

/dubbo/com.alibaba.dubbo.demo.DemoService/providers/dubbo%3A%2F%2F192.168.3.6%3A20880%2Fcom.alibaba.dubbo.demo.DemoService%3Fanyhost%3Dtrue%26application%3Ddemo-provider%26dubbo%3D2.0.0%26generic%3Dfalse%26interface%3Dcom.alibaba.dubbo.demo.DemoService%26loadbalance%3Droundrobin%26methods%3DsayHello%26owner%3Dwilliam%26pid%3D6380%26side%3Dprovider%26timestamp%3D1497161144248

             C、创建configurators节点,对该节点添加子节点监听,当该节点有变化重新暴露,相当于执行A

/dubbo/com.alibaba.dubbo.demo.DemoService/configurators  监听的节点

 

注册了哪些内容:

  创建/dubbo/com.alibaba.dubbo.demo.DemoService/providers/(url)节点

  创建/dubbo/com.alibaba.dubbo.demo.DemoService/configurators 节点,并对该节点添加监听

发布活动图(转):

            

参考:

 Dubbo原理解析-服务发布    

      

      

以上是关于Dubbo的多注册中心配置的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo入门核心玩法二

Dubbo的核心玩法三

开发dubbo应用程序dubbo注册中心相关概述

ZooKeeper 集群的安装配置---Dubbo 注册中心

Dubbo3 终极特性「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心注册中心的原理及开发实战(中)

Dubbo3 终极特性「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心注册中心的原理及开发实战(中)