主要内容:Dubbo能做什么?,Dubbo的总体的调用过程,Dubbo 支持哪些协议,Dubbo中都用到哪些设计模式,Dubbo内置了哪几种服务容器,Dubbo 核心的配置有哪些,Dubbo有哪几种集群容错方案,默认是哪种?,Dubbo有哪几种负载均衡策略,默认是哪种,Dubbo默认使用的是什么通信框架,还有别的选择吗,Dubbo的注册中心有哪些,服务暴露的流程是怎么样的,服务引用的流程是怎么样的,,,,,,Dubbo能做什么? Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任
主要内容:1.框架设计,2.标签解析,3.服务暴露,4.服务引用,5.服务调用,6.netty的架构1.框架设计 config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类 proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory registry 注册中心层:
主要内容:方式一,方式二 ,扫描并注册Service Bean,扫描并注册Reference Bean前言 本文由于涉及到Spring 框架内容比较多,看此篇文章的同学需要具备对Spring框架较深刻的理解。 前面提到Dubbo是一个分布式的RPC框架,我们学到了dubbo的rpc调用、网络框架netty、SPI等,这部分讲的是Dubbo是如何管理Dubbo里的Bean,Dubbo框架里主要有2种Bean,分别为: Service Bean 和Reference
主要内容:1.BeanNameAware,2. BeanClassLoaderAware,3. ApplicationContextAware,4. EnvironmentAware,5. ApplicationEventPublisherAware,6. aware注入时机 现在很多同行做java开发几年了,被迫停留在curd的层面上"拧螺丝",对SpringAware可能只停留在怎么用的层面上,那我们用Spring时可以通过Aware能获取到容器工厂、应用上下文、Bean的类加
主要内容:一、SPI是什么?,Services里的SPI,Dubbo.internal里的SPI一、SPI是什么? SPI是中间件设计不可缺少的一项,SPI能提高应用的可插拔性,SPI的英文全称: Service Provider Implementation, 我们可以在META-INF目录里配置SPI, ServiceLoader会根据配置来找到接口的实现,那Dubbo里的@SPI又是什么呢? Dubbo的Common模块里,定义了一个@SPI注解,该注解
主要内容:1. ScopeBeanFactory与BeanFactory对比,2. 注册Bean,3. 设置Aware和执行一系列的PostProccessor1. ScopeBeanFactory与BeanFactory对比 ScopeBeanFactory是Dubbo自己定义的管理Bean的一个类, 他可与ScopeModel一起实现应用和模块之间的数据隔离和共享等功能,ScopeBeanFactory在ScopeModel类的initialize()方法里初始化, scop
主要内容:一、Dubbo 官方架构图,二、功能解析,三、从消费方解析Dubbo 源码是如何实现调用,DubboNamespaceHandler,Consumer 初始化,服务发现与导入,服务调用,服务容错机制,负载均衡机制 Dubbo是一个RPC开源框架,自定义Dubbo协议实现远程调用。 一、Dubbo 官方架构图 官方给的架构图主要分为了4个版块: 注册中心Registry、监视器Monitor、服务提供者Provider、服务消费者Consumer。 二、功能
主要内容:前言,一、Dubbo架构详解,二、动手写Dubbo,1.模拟服务提供者,2.测试服务提供者,3.模拟服务消费者,4.总结前言 我觉得通过学习源码,可以获取到与大师交流的机会,优秀的设计能让我在编程思想上得到锻炼提升,也会让我去更注重自己的代码质量 ! 一、Dubbo 架构详解 理解Dubbo前,最好先手动画一下dubbo的架构图,画图理解架构是最清晰有效地方式。各模块的职责: 注册中心: 提供服务发现与注册功能, 如果服务发生变动通过watch机制通知服务消
主要内容:前言,1. 工厂模式,2. 整合工厂模式,3. 总结前言 前四篇实现了基于zookeeper和Netty的远程调用的流程,我们可以继续对代码进行优化,利用简单工厂模式使其支持两种协议,代码会更加简洁、有层次感。可以将共有方法抽离出来成一个接口,我在用Http实现的时候,服务端使用了start(URL url)方法,客户端实现了send(URL url,Invocation invocation)方法,同样使用netty时,用S
主要内容:一、 将应用整合Spring ,二、 添加钩子函数优雅管理服务一、 将应用整合Spring 1. 扫描包 使用AnnotationConfigApplicationContext类应用包,指定包的根路径即可,该类会加载并扫描所有Spring容器应该扫描的被指定注解标记类, 比如被@Component、@Configuration注解标记的类。 包的路径需要保证正确,否则在扫描注解的时候会出现找不到的情况,因为后续需要借
主要内容:一、Dubbo整合Zookeeper实现注册服务源码解析,二、手动实现整合Zookeeper实现服务注册与发现,1. 使用zookeeper注册中心替换map,2. 整合curator,3. 提供watcher机制一、Dubbo整合Zookeeper实现注册服务源码解析 Dubbo可以借助zk来实现服务的发现与注册, 服务需要引入依赖: 依赖 说明 dubbo-registry-zookeeper 提供服务发现与注册 dubbo-configcenter-zooke
主要内容:前言,Netty客户端与服务端交互流程,1. 写一个NettyServer,2. 写一个NettyClient, ChannelHandler ,3. 用NettyClient测试NettyServer,4. 整合netty,5. failed to create a child event loop 报错问题前言 上篇文章写到了利用zookeeper的特性实现缓存服务地址列表,接下来我们可以借助Netty的优点对程序进行改造,使其即支持Http容器的
主要内容:前言, 一、项目工程目录,二、手写服务端,三、客户端前言 此文为了加深对RPC的理解,运用Socket网络编程技术手写一个精简版的RPC框架。 一、项目工程目录 二、手写服务端 服务端的实现流畅主要是通过ServerSocket 去接收请求----> 处理请求----> 然后实现目标方法调用,将结果写入到ObjectOutPutStream响应。 三、客户端 客户端通过动态代理技术获取
主要内容:1. 概述,2. 源码实现1. 概述 在 《Dubbo 开发指南 —— 序列化扩展.》 ,对序列化定义如下: 将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。 API 接口,类图如下: 2. 源码实现 2.1 Serialization 2.2 DataInput 数据输入接口。方法如下: 2.2.1 ObjectInput 实现 DataInput 接口,对象输入接口。方法如下:
主要内容:1.概述,2.API,3. Tomcat 实现1.概述 Dubbo 的 HTTP 服务器,在 dubbo-remoting-http 模块中实现,使用在 http://、 rest://、hessian://、webservice://协议上。 dubbo-remoting-http 模块,类图如下: 2.API 2.1 HttpServer 实现 Resetable 接口,HTTP 服务器接口。方法如下: 2.2 AbstractHttpS