主要内容:1.概述,2.ClassLoaderFilter1.概述 在 ProtocolFilterWrapper 中,在服务引用和暴露时,#buildInvokerChain(invoker, key, group) 方法中,基于 Dubbo SPI Active 机制,加载匹配对应的过滤器数组,创建带有过滤器链的 Invoker 对象。代码如下: 2.ClassLoaderFilter 实现 Filter 接口,类加载器切换过滤器实现类。代码如下:
主要内容:1.概述,2. 服务消费者,3. 服务提供者1.概述 回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,能够测试整个调用是否通畅,可用于监控。 2. 服务消费者 com.alibaba.dubbo.rpc.service.EchoService ,Echo 服务接口。代码如下: 所有服务自动实现 EchoService 接口,只需将任意服务引用强制转型为 EchoService,即可使用。 2.1 使用示例 3. 服务提供者 服务
主要内容:1.概述,2. HttpClientConnection,3. HessianProtocol1.概述 Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。 本文涉及类图(红圈部分)如下: 2. HttpClientConnection 实现 HessianConnection 接口,HttpClient 连接器实现类。 2.1 HttpClientConnec
主要内容:1. 概述,2. AbstractProxyProtocol,3. HttpProtocol1. 概述 基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现 涉及类图(红圈部分)如下: 2. AbstractProxyProtocol 现 AbstractProtocol 抽象类,Proxy 协议抽象类。为 HttpProtocol 、RestProtocol 等子类,提供公用的服务暴露、服务引用的公用方法,同时定义了如下抽象方法,用于不同子类协议实
主要内容:1.概述,2. 消费者调用服务,3. 提供者提供服务1.概述 在 dubbo:// 协议的调用,一共分成三种: sync 同步调用 async 异步调用 oneway 单向调用 前两种比较好理解,都是基于 Request Response 模型,差异点在异步调用,服务消费者不阻塞等待结果,而是通过回调的方式,处理服务提供者返回的结果。 最后一种,基于 Message 模型,发起调用,而不关注等待和关注执行结果。 因此,从性能上:oneway > a
主要内容:1.概述,2.ExchangeHandler,3. Codec1.概述 本文涉及类图如下: 2.ExchangeHandler 在 DubboProtocol 中,实现了 ExchangeHandler ,代码如下: 3. Codec 实现 Codec2 接口,支持多消息的编解码器。 3.1 DubboCountCodec 3.2 DubboCodec 实现 Codec2 接口,继承 ExchangeCodec 类,Dubbo 编解码器实现类。 构造方法 3
主要内容:1. 概述,2. ChannelBuffer1. 概述 在 dubbo-remoting-api 的 buffer 包中,一方面定义了 ChannelBuffer 和 ChannelBufferFactory 的接口,同时提供了多种默认的实现。整体类图如下: 2. ChannelBuffer 实现 Comparable 接口,通道 Buffer 接口。 2.1 AbstractChannelBuffer 实现 ChannelBuffer 接
主要内容:1.概述,2.ExchangeChannel,3. ExchangeClient,4. ExchangeServer,5. 请求/响应模型,6. Handler1.概述 exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer。 类图: 2.ExchangeChannel 继承 Channel 接口,信息交换
主要内容:1.概述,2.TelnetCodec,3.TelnetHandler,4.TelnetHandlerAdapter1.概述 在 《Dubbo 用户指南 —— Telnet 命令参考手册》 一文中,我们可以看到,Dubbo 支持通过 telnet 命令,用来服务治理。 本文涉及类图如下: 2.TelnetCodec 实现 TransportCodec 类,Telnet 命令编解码器。 3.TelnetHandler telnet 命令处理器。代码如下: 4.TelnetHandlerAd
主要内容:1.概述,2.AbstractPeer,3.AbstractEndpoint,4.Client,5. Server,6. Channel,7. ChannelHandler,8. Dispacher,9. Codec1.概述 dubbo-remoting-api 模块, transport 包,网络传输层。 涉及的类图如下: 2.AbstractPeer 实现 Endpoint、ChannelHandler 接口,Peer 抽象类。 使用装饰模式 3.AbstractEndpoint
主要内容:1.概述,2.源码分析,3.Endpoint,4 ChannelHandler,5 Transporter,6 Codec2,7 Dispatcher1.概述 Dubbo 自己实现的 NIO 服务器,使用在 dubbo:// 和 thrift:// 协议上。 2.源码分析 dubbo-remoting-api 的项目结构: Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。 from 《Dubbo
主要内容:1.概述,2.doExportUrls,3. Protocol1.概述 Dubbo 服务暴露有两种方式 本地暴露,JVM 本地调用。配置如下: <dubbo:service scope=“local” /> <dubbo:service scope=“remote” /> 在不配置 scope 的情况下,默认两种方式都暴露。 2.doExportUrls 本地暴露服务的顺序图如下: 我们看到 ServiceConfig#export() 方法中,会在配置初始
主要内容:1.概述,2.JdkProxyFactory,3.StubProxyFactoryWrapper1.概述 本文使用 JDK 生成动态代理的代码实现和 Dubbo 本地存根( Stub )的特性。 2.JdkProxyFactory 实现 AbstractProxyInvoker 抽象类,代码如下: 3.StubProxyFactoryWrapper 实现 ProxyFactory 接口,存根代理工厂包装器实现类。 3.1 构造方法 proxyFactory 属性,ProxyFactor
主要内容:1.概述,2.整体流程,3.ProxyFactory,4.AbstractProxyInvoker,6. Proxy1.概述 在 《Dubbo 用户指南 —— schema 配置参考手册》 中,我们可以看到 <dubbo:service /> 和 <dubbo:reference /> 标签中,可以通过 “proxy” 属性,可以配置动态代理的生成方式: 生成动态代理方式,可选:jdk / javassist 2.整体流程 在 Consumer 中,我们调用 Service 接口的方法
主要内容:1. 概述,2. 本地引用,3. 服务引用1. 概述 Dubbo 服务引用,和 Dubbo 服务暴露一样,也有两种方式: 本地引用,JVM 本地调用。 远程暴露,网络远程通信。 2. 本地引用 2.1 createProxy 本地引用服务的顺序图如下: 2.2 isInjvmRefer 2.3 Protocol 涉及的 Protocol 类图如下: 2.3.1 ProtocolFilterWrapper 2.3.2 ProtocolLis