Dubbo 源码解析
文章平均质量分 57
dubbo 源码解析,基于2.6.1
wuhulala
这个作者很懒,什么都没留下…
展开
-
Dubbo源码解析(二十)Dubbo 服务自省(小马哥视频观后感)
服务自省Dubbo 2.7.5 +背景业界方案CloudNative 的 技术兴起Sping Cloud的快速崛起Dubbo 所面临的的挑战如何解决或缓解注册中心压力过载Dubbo是以接口发布服务的,所以注册中心节点会多,内存会很大。消费者和提供者与注册中心压力都会很大。网络抖动会造成网络风暴。因为注册中心需要实时将服务上下线等时间通知到对应的消费者、提供者。如何支持以应用为粒度的服务注册与发现支持SpringCloud服务注册与发现模型支持K原创 2020-08-22 14:58:37 · 1311 阅读 · 2 评论 -
Dubbo源码解析(十九)Dubbo 泛化引用
泛化引用的一个例子 public static void main(String[] args) throws InterruptedException { // 当前应用配置 ApplicationConfig application = new ApplicationConfig(); application.setName("generic-...原创 2019-07-20 21:39:32 · 480 阅读 · 0 评论 -
Dubbo源码解析(十八)Dubbo 序列化、反序列化
文章目录Dubbo 序列化、反序列化序列化--编解码技术介绍目的实际序列技术Java序列化hessian2fstjsonkyroprotobufavroDubbo 序列化的实现源码结构dubbo-serialization-apiHession2实现Hessian2ObjectInputHessian2ObjectOutputdubbo-serialization-protobuf-json 实现...原创 2019-07-20 21:14:05 · 2144 阅读 · 0 评论 -
Dubbo源码解析(十七)Dubbo 处理TCP粘包拆包
熟悉TCP编程的读者可能都知道,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制。本篇文章通过深入dubbo源码,一起探索dubbo是如何解决这个问题的原创 2019-04-13 11:20:50 · 3793 阅读 · 0 评论 -
Dubbo源码解析(十六) Dubbo Transporter
文章目录Transport 定义OSI 模型TransportNettyServer属性创建一个NettyServer通道处理器总结Transport 定义transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec这里的transport可以理解...原创 2019-04-06 22:44:04 · 1208 阅读 · 0 评论 -
Dubbo源码解析(十五) Dubbo URL 创建逻辑
引入在dubbo中,URL是整个服务发布和调用流程的串联信息,它包含了服务的基本信息(服务名、服务方法、版本、分组),注册中心配置,应用配置等信息,并且通过URL可以实现扩展点自适应等。它是在服务发布和注册的时候,进行生成的,即在 ServiceConfig.export() 或 ReferenceConfig.get() 初始化时,将 Bean 对象转换 URL 格式,所有 Bean 属性转...原创 2019-04-06 12:22:22 · 1608 阅读 · 0 评论 -
Dubbo源码解析(十四) Dubbo 2.7.x 新功能之元数据中心
元数据元数据是什么?元数据定义为描述数据的数据,在服务治理中,例如服务接口名,重试次数,版本号等等都可以理解为元数据。在 2.7 之前,元数据一股脑丢在了注册中心之中,这造成了一系列的问题:推送量大 -> 存储数据量大 -> 网络传输量大 -> 延迟严重生产者端注册 30+ 参数,有接近一半是不需要作为注册中心进行传递;消费者端注册 25+ 参数,只有个别需要传递给...原创 2019-04-04 21:38:59 · 5215 阅读 · 3 评论 -
Dubbo源码解析(十三)dubbo消费者、生产者匹配解析
在实现服务相互调用的时候,会有一些group和version的配置,并且消费者根据这些配置实现public static boolean isMatch(URL consumerUrl, URL providerUrl) { String consumerInterface = consumerUrl.getServiceInterface(); String p...原创 2019-01-24 00:19:07 · 1750 阅读 · 0 评论 -
Dubbo源码解析(十二)dubbo 协议探秘
众所流传,rpc协议十高性能的协议,是远超http协议的性能呢,但是现在由于异构跨语言系统的之间的交互与调用,从而springcloud 大放异彩,而springcloud 使用的就是http协议,当前跨语言协议还有thrift,protobuff、avro等。当然之前dubbo是hession序列化,导致只有java客户端。但是现在已经dubbo-nodejs,dubbo-php这些项目了(还没...原创 2018-11-27 22:58:39 · 1923 阅读 · 0 评论 -
Dubbo源码解析(十一) Dubbo Exchanger
先看一下Exchanger的接口定义,就是bind和connect ,bind是服务端调用的,绑定一个端口用来接收客户端的请求。connect是作为一个客户端去连接服务端,进行和服务端交换。@SPI(HeaderExchanger.NAME)public interface Exchanger { /** * bind. * * @param url...原创 2018-06-23 22:57:18 · 1360 阅读 · 0 评论 -
Dubbo源码解析(十) Dubbo Registry以Zookeeper为例
默认是DubboRegistryFactory@SPI("dubbo")public interface RegistryFactory { /** * Connect to the registry * <p> * Connecting the registry needs to support the contract: <b...原创 2018-06-12 20:18:10 · 1758 阅读 · 0 评论 -
Dubbo源码解析(九)Dubbo系列 源码总结+最近感悟
从0开始看dubbo源码过程中,对于整个源码阅读与之前阅读部分的Spring源码不太一样,首先之前没有看过源码,因为Spring的一个流程比较复杂,所以一直在跳转跳转,大流程比较多,生命周期较长。自己当时也不会做一下笔记。又组件比较多且复杂。但是Dubbo的分层很是清晰,几层分下来一层一层的看下去,边记笔记边看,很舒服。以及Dubbo SPI初始化过程,里面的SPI 虽简洁,但不失优雅。通过约定的...原创 2018-06-11 23:04:32 · 14297 阅读 · 0 评论 -
Dubbo源码解析(八)Dubbo Filter 之 FilterChain
首先通过 ProtocolFilterWrapper 包装Protocol,这样所有的发布与引用服务逻辑都需要走到ProtocolFilterWrapper的逻辑。 ProtocolFilterWrapper.java public &lt;T&gt; Exporter&lt;T&gt; export(Invoker&lt;T&gt; invoker) throws RpcExcept...原创 2018-06-10 23:10:41 · 1003 阅读 · 0 评论 -
Dubbo源码解析(七)Dubbo Protocol 之 RegistryProtocol
RegistryProtocol 与 DubboProtocol的区别* RegistryProtocol 可以认为并不是一个真正的协议,他是这些实际的协议(dubbo . rmi)包装者,这样客户端的请求在一开始如果没有服务端的信息,会先从注册中心拉取服务的注册信息,然后再和服务端直连,这个很重要,因为在我司是通过注册中心进行路由转发信息的。* URL 协议头不同,`RegistryProtocol` 通过 URL 的 `registry://` 协议头标识, DubboProtocol通过原创 2018-06-07 20:19:51 · 6663 阅读 · 2 评论 -
Dubbo源码解析(六)Dubbo Protocol 以DubboProtocol为例
Protocol 包括两个功能,发布服务和引用服务,所以就可以想到,应该是在Service发布和Reference引用的时候调用了此接口。也就是在ServiceBean、ReferenceBean初始化的时候,这一层也不复杂代码如下@SPI("dubbo")public interface Protocol { /** * Get default port whe...原创 2018-05-30 21:36:19 · 1459 阅读 · 1 评论 -
Dubbo源码解析(五)Dubbo SPI(Service Provider Interface)
如何从配置文件中加载SPI的如何创建一个SPIdubbo 是怎么判断SPI是Wrapper的呢?如何进行依赖注入的Dubbo 自适应装配总结如何从配置文件中加载SPI的private Map<String, Class<?>> loadExtensionClasses() { final SPI default...原创 2018-05-29 23:00:44 · 902 阅读 · 0 评论 -
Dubbo源码解析(四) 线程池 ThreadPool
dubbo 线程模型上图体现出了在dubbo的服务端,在传输完成接收到客户端的请求之后,是通过Dispatcher分发请求到线程池处理之后,返回结果给客户端,当然,也可以直接由Dispatcher处理并返回结果。官方建议如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。但如果事件处理逻...原创 2018-05-23 22:57:02 · 3464 阅读 · 0 评论 -
Dubbo源码解析(三)执行器 Invoker
Invoker在dubbo中,万物皆是Invoker,即便是Exporter也是由Invoker进化而成的那么Invoker到底是什么鬼在 Dubbo 的核心领域模型中: Protocol 是服务域,它是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。 Invoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换...原创 2018-05-17 19:57:43 · 14547 阅读 · 2 评论 -
Dubbo源码解析(二) 服务代理 ServiceBean
我之前看到了用dubbo:service会被解析为一个ServiceBean,那么服务代理和这个有关系吗?猜一猜,有吧?想一想Spring中的各个扩展点?既然没有看到相关的BeanPostProcessor和BeanFactoryPostProcessor再想一想,会不会bean的初始化的时候,进行发布呢?对了 InitializingBean,这么个东西的afterProper...原创 2018-05-17 19:56:41 · 1828 阅读 · 2 评论 -
Dubbo源码解析(一)请求调度器 Dispatcher
调度器 Dispatcher调度策略all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。direct 所有消息都不派发到线程池,全部在 IO 线程上直接执行。message 只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在 IO 线程上执行。execution 只请求消息派发到线程池,不含响应,响应和其它连接断开事件,心跳等消息,直接在 I...原创 2018-05-12 13:32:33 · 6366 阅读 · 5 评论