`
wolfweis
  • 浏览: 20530 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读dubbo源码笔记(三)

 
阅读更多
现在看 核心的 ServiceConfig

首先推荐 看以下 netcomm 童鞋的文章
http://www.iteye.com/topic/1123039

在服务提供者暴露一个服务的详细过程 讲解的很清楚

服务提供者暴露一个服务
这些代码基本上都是在 ServiceConfig 完成

过程是
export --doExport --doExportUrls

export 方法 主要是 解决立即doExport还是 delay以后执行

doExport  主要是 装配和检查-- application,registries,monitor,Protocol

doExportUrls 真正的干活了
最主要的在最后的一段
            if (registryURLs != null && registryURLs.size() > 0
                    && url.getParameter("register", true)) {
                for (URL registryURL : registryURLs) {
                    URL monitorUrl = loadMonitor(registryURL);
                    if (monitorUrl != null) {
                        url = url.addParameterAndEncoded(Constants.MONITOR_KEY, monitorUrl.toFullString());
                    }
                    String providerURL = url.toFullString();
                    if (logger.isInfoEnabled()) {
                        logger.info("Register dubbo service " + interfaceClass.getName() + " url " + providerURL + " to registry " + registryURL);
                    }
                    Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, providerURL));
                    Exporter<?> exporter = protocol.export(invoker);
                    exporters.add(exporter);
                }
            } else {
                Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, url);
                Exporter<?> exporter = protocol.export(invoker);
                exporters.add(exporter);
            }

如果 发现需要注册 那么
从proxyFactory 获取 AbstractProxyInvoker---(这里的URL是Registry URL,里面放置了 Provider URL )--- 然后 通过 RegistryProtocol 注册 --(export)-- 然后 ,生成InvokerDelegete --(这里的URL 是 从Register URL 取出Provider URL)-- 在根据实际 Provider Protocol--(export)-- 成  Exporter

RegistryProtocol  类 里面 这么玩的
    public <T> Exporter<T> export(final Invoker<T> originInvoker) throws RpcException {
        //export invoker
        final ExporterChangeableWrapper<T>  exporter = doLocolExport(originInvoker);
        //registry provider
        Registry registry = doRegister(originInvoker);
        //设置exporter与registry的关系 (for unexport)
        exporter.setRegistry(registry);
        //保证每次export都返回一个新的exporter实例
        return new Exporter<T>() {
            public Invoker<T> getInvoker() {
                return exporter.getInvoker();
            }
            public void unexport() {
                exporter.unexport();
            }
        };
    }


doLocolExport --最终执行 provider Protocol(dubboProtocol,rmiProtocol 等......................) 的 export方法 ,

doRegister 注册 URL ,实际上默认情况下 也是一个 dubbo协议RPC






分享到:
评论

相关推荐

    MyDubbo:dubbo源码学习笔记

    《MyDubbo:Dubbo源码学习笔记》 在Java开发领域,Dubbo是一个非常知名的分布式服务框架,它由阿里巴巴开源并广泛应用于大型企业系统。本篇笔记将深入探讨Dubbo的核心概念、工作原理以及源码解析,帮助开发者更好地...

    Dubbo阅读笔记

    通过阅读和分析源码,我们可以更深入地理解其内部机制,以便更好地应用和扩展Dubbo,满足各种复杂的分布式系统需求。在实际项目中,结合注册中心、监控系统以及服务治理策略,Dubbo能够帮助开发者构建高可用、可扩展...

    dubbo笔记-服务注册发布以及消费源码分析

    通过对Dubbo服务注册、发布和消费源码的深入分析,我们可以更清晰地了解Dubbo如何实现服务间的通信,这对于优化服务性能、排查问题以及扩展自定义功能都具有重要的指导意义。同时,这也反映出Dubbo的设计理念——...

    【课后笔记】Apache Dubbo服务注册及服务消费源码分析

    Apache Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了服务治理的全套解决方案。...本文将深入探讨这两个过程的源码分析,以及涉及...理解这些核心概念和流程,对于深入掌握Dubbo的源码和优化服务治理至关重要。

    服务治理中间件dubbo原理解析

    此文档是从学习 dubbo 源码过程中的笔记中整理出来的,由于时间及能力 原因,理解有误之处还请谅解,希望对大家学习使用 dubbo 有所帮助。 dubbo 是阿里基于开源思想 java 实现的服务治理中间件, 目前除了阿里之 外...

    dubbo+zookeeper入门资源

    而Zookeeper是Apache的一个开源项目,它是一个分布式的,开放源码的分布式应用程序协调服务,是集群的必备组件,常被用来作为服务注册中心。 【描述】"dubbo+zookeeper入门资源,可直接使用,适合新手练习使用"意味...

    dubbo学习例题代码资源

    【Dubbo学习详解】 Dubbo,一款由阿里巴巴开源的高性能Java RPC框架,是服务治理的典型代表,广泛应用于分布式系统中。...在学习过程中,建议结合源码阅读,理解每个组件的工作原理,并动手实践,以巩固所学知识。

    Dubbo入门到精通架构高级课程(视频+课件+源码)

    【源码】的提供让学习者有机会亲手实践,理解 Dubbo 的内部工作原理。通过阅读和修改这些源码,学习者可以深入探究服务调用、数据序列化、服务监控等核心模块,提升自身的代码调试和问题解决能力。 在【分布式系列...

    dubbo_admin2.5.4

    6. **文档**:可能包含使用指南、API文档或开发者笔记,帮助用户理解和使用Dubbo Admin。 7. **构建脚本**:如Maven的`pom.xml`或Gradle的`build.gradle`,用于自动化构建过程。 总结来说,"dubbo_admin2.5.4"是一...

    read:学习笔记dubbo,spring,mybatis,netty源码解析-源码解析

    学习Dubbo源码有助于理解其核心的RPC(远程过程调用)机制,包括服务发现、负载均衡、故障转移等。通过源码分析,我们可以了解到如何实现高效的服务注册与发现,以及如何设计高可用的服务调用流程。 2. **Spring**...

    dubbo demo

    8. **配置与集成**:Dubbo可以通过XML、API或注解三种方式进行配置,与Spring的无缝集成使得配置更加灵活方便。在项目中,我们通常会看到Spring配置文件中关于Dubbo的相关配置。 9. **监控与调试**:Dubbo内置了...

    20180620-Dubbo常用配置文件分析-笔记.docx

    ### Dubbo常用配置文件分析及核心源码阅读 #### 多版本支持 在微服务架构中,服务的迭代更新不可避免,而如何确保新旧版本之间的兼容性成为一个关键问题。Dubbo通过多版本支持机制,有效地解决了这一问题。具体...

    dubbolearn1_dubbo_

    接下来,深入到5.3-Dubbo核心源码分析-笔记.pdf,这份文档可能详细解读了Dubbo的关键组件和其工作原理: 1. **Protocol组件**:Dubbo的协议层负责序列化、反序列化以及网络通信,例如Dubbo协议、RMI协议、Hessian2...

    【高分项目】基于dubbo改造Chengfeng【源码+论文+学习笔记+操作手册].zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...

    2020年springcloud alibaba课程源码.zip

    源码中可能包含了 Dubbo 服务的创建、消费以及与 Spring Cloud 的整合。 4. **Seata**:Seata 是一个分布式事务解决方案,提供 AT、TCC、SAGA 和 XA 事务模式。在课程源码中,学习者可以学习到如何在微服务环境中...

    java实现校园一卡通源码-dubbo:达博笔记

    java实现校园一卡通源码 1、分布式基础 1.1 什么是分布式系统 《分布式系统原理与范型》定义:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统。分布式系统(distributed system)是建立...

    xmljava系统源码-spring-cloud-kuang:狂神springcloud笔记+源码+config

    java系统源码 SpringCloud笔记 1、前言 1.1、回顾 回顾之前的知识 JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot Dubbo、Zookeeper、分布式基础 Maven、Git Ajax、Json ... 串一下自己会的...

Global site tag (gtag.js) - Google Analytics