其他分享
首页 > 其他分享> > 分布式中台实践

分布式中台实践

作者:互联网

链客,专为开发者而生,有问必答!

此文章来自链客区块链技术问答社区,未经允许拒绝转载。
在这里插入图片描述

-Dubbo源码分析Regist组件1

 Dubbo最中心的功用包括进程和和谐RPC协议通信。进程和谐的要害组件是Regist,后者的要害组件在于Remoting。今天咱们要点分析Dubbo的进程和谐组件。

进程和谐组件的功用包括:1)注册消费端组件 2)布置服务端组件 3)检测消费端和服务端的心跳 4)同步消费端的服务。其要点处理服务注册和服务发现问题,当然还有一些服务的治理功用。这也是微服务配置中心的底子中心功用。

注册组件包括的底子组件包括Registry、RegistryFactory、RegistryService和NotifyListener。其间Registry作为注册接口,其结束Node, RegistryService,其结束注册、去注册、订阅和免除订阅等功用。RegistryFactory通过战略模式结束Registry的调用,两者一起结束可插拔的内核模式。NotifyListener结束通知功用。本组件的中心在于Registry、RegistryFactory两部分,其结束的抽象类包括AbstractRegistry和AbstractRegistryFactory。Dubbo本身自带结束Dubbo、Multicast、Redis和Zookeeper的结束,其他协议的结束需求自己结束。从可扩展的角度分析,Dubbo结束的机制非常灵敏。

以Dubbo的注册为例,其结束服务的衔接和监听,其具体代码如下:

public DubboRegistry(Invoker registryInvoker, RegistryService registryService) {

    super(registryInvoker.getUrl());

    this.registryInvoker = registryInvoker;

    this.registryService = registryService;

    // Start reconnection timer

    int reconnectPeriod = registryInvoker.getUrl().getParameter(Constants.REGISTRY_RECONNECT_PERIOD_KEY, RECONNECT_PERIOD_DEFAULT);

    reconnectFuture = scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {

        public void run() {

            // Check and connect to the registry

            try {

                connect();  //服务的衔接

            } catch (Throwable t) { // Defensive fault tolerance

                logger.error("Unexpected error occur at reconnect, cause: " + t.getMessage(), t);

            }

        }

    }, reconnectPeriod, reconnectPeriod, TimeUnit.MILLISECONDS);

}

protected final void connect() {

    try {

        // 判断是否发起正常,假如正常直接退出

        if (isAvailable()) {

            return;

        }

        if (logger.isInfoEnabled()) {

            logger.info("Reconnect to registry " + getUrl());

        }

        clientLock.lock();//客户所确定

        try {

            // Double check whether or not it is connected

            if (isAvailable()) {

                return;

            }

            recover();//回复服务

        } finally {

            clientLock.unlock();

        }

    } catch (Throwable t) { // Ignore all the exceptions and wait for the next retry

        if (getUrl().getParameter(Constants.CHECK_KEY, true)) {

            if (t instanceof RuntimeException) {

                throw (RuntimeException) t;

            }

            throw new RuntimeException(t.getMessage(), t);

        }

        logger.error("Failed to connect to registry " + getUrl().getAddress() + " from provider/consumer " + NetUtils.getLocalHost() + " use dubbo " + Version.getVersion() + ", cause: " + t.getMessage(), t);

    }

}

通过以上代码分析,Dubbo发起服务采用了守时线程池,而且依照固定的距离发起,保证服务的安稳。抽象层的注册只重视于服务的引入,具体的协议层担任服务的发起注册。

通过以上的分析,注册组件分为三层,第一层为接口层,担任具体的使命职责定义;第二层为抽象注册层,担任业务的引入、销毁等生命周期办理;第三层为具体的协议注册结束层,担任具体业务的结束。Dubbo的结束是一个职责明晰,使命明晰的一个进程。

标签:Dubbo,结束,getUrl,实践,注册,组件,服务,分布式
来源: https://blog.csdn.net/weixin_44172023/article/details/90598914