Dubbo 架构设计与源码解析(二) 服务注册
作者&投稿:阚琛 (若有异议请与网页底部的电邮联系)
在介绍服务注册发现之前,我们先简单了解一下 Dubbo 源码中贯穿始终的核心机制——SPI 机制。Dubbo SPI 旨在通过读取配置文件找到具体实现类,并利用动态字节码编译技术和反射机制实现实例化。相较于 Java SPI,Dubbo SPI 实现了内部的 IoC 和 Aop,具有高扩展和解耦的优点。
服务注册主要包括以下几个步骤:
1. 初始化配置:首先需要实例化 ServiceConfig 实例,声明注册接口、接口实例、注册中心配置,然后由 DubboBootstrap 调用 initialize 方法实现 configManager 和 Environment 的初始化。
2. 组装 URL:根据初始化配置组装注册接口服务的 URL。URL 在 Dubbo 内部通过 @Adaptive 注解实现 SPI 的核心,通过修改 URL 的头部协议(如:register、dubbo、injvm 等),在调用该方法的时候,会根据不同的协议切换不通的实现类,实现了 Dubbo 技术架构与业务逻辑的解耦。
3. Invoker 封装:通过内置的动态字节码编译(默认 javassist)生成 Invoker 代理类,然后通过反射机制生成 Wrapper 实例。Invoker 是 Dubbo 的核心模型,其他模型都向它靠拢或转换成它。
4. Exporter 封装:将 Invoker 封装成 Exporter,并将封装后的 Exporter 存储到本地 map 中。然后调用底层通信服务(默认 netty)进行端口监听,并封装 Exchanger 与 Transporter,用于处理网络传输消息的编码/解码。
5. 注册服务节点:封装 Exporter 并开启服务端口监听后,调用注册中心(默认 Zookeeper)注册服务节点信息。
至此,Dubbo 服务注册的整体流程已大致结束。如有不当或错误观点,欢迎在评论区指出。感兴趣的同学可以关注后续 “Dubbo 架构设计与源码解析” 系列的文章。
隗泪斯娜: Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 主要核心部件 Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制.RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能 Registry: 服务目录框架用于服务的注册和服务事件发布和订阅.Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载.
阳春市13366344168: 搭建dubbo+zookeeper+spring架构为什么不要用jdk1.8 - ?
隗泪斯娜: 没有这种说法吧,如果有多办是你们项目的环境可能对1.8的支持不好,所以不让用
阳春市13366344168: 如何更好地学习dubbo源代码 - ?
隗泪斯娜: 1、Dubbo与Spring的整合 Dubbo在使用上可以做到非常简单,不管是Provider还是Consumer都可以通过Spring的配置文件进行配置,配置完之后,就可以像使用 spring bean一样进行服务暴露和调用了,完全看不到dubbo api的存在.这是因为...
阳春市13366344168: dubbo 框架如何学习 - ?
隗泪斯娜: 这个做好了很牛了,但要有大量的知识做支撑: 1 linux操作系统的知识,这里指的是linux内核的运作机制,如进程管理/内存管理等,总之需要懂得linux是怎么运作的. 2 linux外围,如shell脚本/各种工具集这些 3 分布式理论基础,可以看看hadoop这些开源分布式系统的实现原理 4 大量的经验,系统集成是个大工程,经验永远是很重要的. 5 一定的语言基础C++/JAVA
阳春市13366344168: 什么叫分布式服务框架 - ?
隗泪斯娜: 主要提供微服务发布,服务治理和服务监控,因为复杂的业务需求,会造成线上服务的混乱,和连接数据库的混乱.微服务的好处是:业务解耦,方便扩容,方便系统按模块升级,模块重用,开发新业务简单,开发人员可以专注某一业务,方便代码管理,方便数据库优化 微服务的坏处:(分布式服务框架要解决的问题) 每个系统之间的关系变得非常复杂 随着调用的业务增多,底层的模块需要高可用性和并发 需要分布式Session框架支持 分层后增加测试复杂度
阳春市13366344168: 如何使用maven构建dubbo服务的可执行jar包 - ?
隗泪斯娜: 1.2MyBatis+Spring+MySql简单配置1.2.1搭建Spring环境1,建立maven的web项目;2,加入Spring框架、配置文件;3,在pom.xml中加入所需要的jar包(spring框架的、mybatis、mybatis-spring、junit等);4,更改web.xml和spring的配置文件;5,添加一个jsp页面和对应的Controller;6,测试.
阳春市13366344168: dubbo框怎么 解析json类 - ?
隗泪斯娜: Gson是谷歌推出的解析json数据以及将对象转换成json数据的一个开源框架. 现在json因其易读性和高效率而被广泛的使用着.相对于java以及其它json的解析框架,Gson非常的好用.简单来讲就是根据json的数据结构定义出相应的javabean --->"new"出Gson的实例gson---->gson.fromJson(jsonString,JavaBean.class) 即可.转载,仅供参考.
阳春市13366344168: nodejs dubbo java架构选择 - ?
隗泪斯娜: 用main吧,后台接口写成rest接口,前端用nodejs去调就可以了.提供provider.java包含main方法启动项目.
阳春市13366344168: android 可以使用dubbo吗 - ?
隗泪斯娜: 可以的 DUBBO配置规则详解 研究DUBBO也已经大半年了,对它的大部分源码进行了分析,以及对它的内部机制有了比较深入的了解,以及各个模块的实现.DUBBO包含很多内容,如果想了解DUBBO第一步就是启动它,从而可以很好的使用...
阳春市13366344168: dubbo java环境下出现Cannot resolve reference to bean 'carDao' setting bean property 'carDao'错误 - ?
隗泪斯娜: 往service里注入失败了. 改成:ref="CarServiceImpl"Dubbo分布式服务框架 服务注册不上: (1) 检查dubbo的jar包有没有在classpath中,以及有没有重复的jar包 (2) 检查有没有重复的dubbo.properties配置文件 (3) 检查暴露服务的...