微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分布式中台实践

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

文章来自链客区块链技术问答社区,未经允许拒绝转载。

在这里插入图片描述

-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的结束是一个职责明晰,使命明晰的一个进程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐