内容简介:还没关注?快动动手指!
还没关注?
快动动手指!
聊技术、论职场!
为IT人打造一个“有温度”的 狸猫技术窝
一、Dubbo 整体架构
dubbo官方的这个图很复杂,但是一开始没有必要深入细节,下面我们简单讲解主要模块。
其中 Service 和 Config 层为 API ,对应服务提供方来说是使用ServiceConfig来代表一个要发布的服务配置对象。
对应服务消费方来说ReferenceConfig代表了一个要消费的服务的配置对象。可以直接初始化配置类,也可以通过 spring 解析配置生成配置类。
其它各层均为 SPI ,SPI意味着下面各层都是组件化可以被替换的,这也是dubbo比较好的一点,主要功能组件都可以插件化替换。
dubbo增强了JDK中的SPI功能,在dubbo中其它各层都是使用扩展点进行提供服务的。
dubbo增强的SPI增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点,并且不会一次性实例化扩展点的所有实现类
这避免了有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源的情况,增强的SPI是在具体用某一个实现类时候才进行实例化。
后续会具体讲解增强的SPI的实现原理。
proxy 服务代理层 :扩展接口为 ProxyFactory,dubbo实现的SPI主要JavassistProxyFactory(默认使用)和JdkProxyFactory,用来对服务提供方和服务消费方的服务进行代理。
registry 注册中心层 :封装服务地址的注册与发现,扩展接口为 Registry , RegistryService
Dubbo提供的扩展接口实现为ZookeeperRegistry,RedisRegistry,MulticastRegistry,DubboRegistry。
扩展接口RegistryFactory,dubbo提供的扩展接口实现DubboRegistryFactory,DubboRegistryFactory,RedisRegistryFactory,ZookeeperRegistryFactory。
cluster 路由层 :封装多个提供者的路由及负载均衡,并桥接注册中心,扩展接口为 Cluster , Directory , Router ,LoadBalance。
monitor 监控层 :RPC 调用次数和调用时间监控,扩展接口为 MonitorFactory , Monitor , MonitorService。
protocol 远程调用层 :封将 RPC 调用,扩展接口为 Protocol , Invoker , Exporter。
exchange 信息交换层 :封装请求响应模式,同步转异步,扩展接口为 Exchanger , ExchangeChannel ,ExchangeClient , ExchangeServer
transport 网络传输层 :抽象 mina 和 netty 为统一接口扩展接口为 Channel , Transporter , Client , Server , Codec
:可复用的一些工具,扩展接口为 Serialization ,
ObjectInput , ObjectOutput , ThreadPool
关于dubbo扩展点一个简单的例子:
以扩展 Dubbo 的协议为例,在协议的实现 jar 包内放置文本文件: METAINF/dubbo/com.alibaba.dubbo.rpc.Protocol ,内容为:
myprotocol=com.alibaba.user.MyProtocol
MyProtocol内容如下:
package com.alibaba.user; import com.alibaba.dubbo.rpc.Protocol; public class MyProtocol implemenets Protocol { // ... }
配置模块中的配置
Dubbo 配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。
比如:
<dubbo:protocol name="myprotocol" />
二、远程调用细节
3.1 服务提供者暴露一个服务的详细过程
首先 ServiceConfig 类拿到对外提供服务的实际类 ref(如:UserServiceImpl)
然后通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化。
接下来就是 Invoker 转换到 Exporter 的过程。Dubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程,上图中的红色部分。
Dubbo 协议的 Invoker 转为 Exporter 发生在 DubboProtocol 类的
export 方法
它主要是打开创建一个Netty Server 侦听服务,并接收客户端发来的各种请求,通讯细节由 Dubbo 自己实现,然后注册服务到服务注册中心。
3.2 服务消费者消费一个服务的详细过程
-
首先 ReferenceConfig 类的 init 方法调用 Protocol 的 refer 方法生
成 Invoker 实例(如上图中的红色部分),这是服务消费的关键。
-
接下来把Invoker 转换为客户端需要的接口(如:UserServiceBo)。
-
dubbo协议的invoker转换为客户端需要的接口是发生在DubboProtocol的refer方法
-
他主要是创建一个netty client 链接服务提供者,通讯细节由 Dubbo 自己实现。
三、总结
本文简单的介绍了dubbo整体架构,后续具体介绍dubbo增强的spi的实现,服务提供方如何发布服务。
比如何时如何创建netty Server来监听服务消费者的链接,何时如何注册服务到服务治理中心;dubbo的filter链如何构建;服务消费方如何消费服务,何时创建netty client….
END
本文作者:ifeve
本文来源:
http://ifeve.com/dubbo-framework/
本文 转载自 并发编程网 – ifeve.com
长按下图二维码,即刻关注【 狸猫技术窝 】
阿里、京东、美团、字节跳动
顶尖技术专家 坐镇
为IT人打造一个 “有温度” 的技术窝!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Prometheus 为你的微服务保驾护航
- 一款 GitHub 代码泄露监控系统,为企业安全保驾护航!
- 面对runc逃逸漏洞,华为云容器为您保驾护航
- 中文项目:快速识别验证码,CNN也能为爬虫保驾护航
- shadowtunnel v1.6 发布: 新增 SDK 支持 , 为上网保驾护航 !
- shadowtunnel v1.6 发布: 新增 SDK 支持 , 为上网保驾护航 !
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java语言精粹
Jim Waldo / 王江平 / 电子工业出版社 / 2011-6 / 39.00元
这是一本几乎只讲java优点的书。 Jim Waldo先生是原sun微系统公司实验室的杰出工程师,他亲历并参与了java从技术萌生、发展到崛起的整个过程。在这《java语言精粹》里,jim总结了他所认为的java语言及其环境的诸多精良部分,包括:类型系统、异常处理、包机制、垃圾回收、java虚拟机、javadoc、集合、远程方法调用和并发机制。另外,他还从开发者的角度分析了在java技术周围......一起来看看 《Java语言精粹》 这本书的介绍吧!