Dubbo源代码解析

一、Dubbo源代码层次结构

common(io序列化、store、线程)+ cofig + 容器container

remoting 远端通信(TCP、编解码、buffer、req/resp、消息分发)->mina netty http p2p zookeeper

RPC(协议、调用者、proxy、filter、tps)

RMI、http、redis、memcached、injvm各种协议的支持

monitor 监控和统计数据

registry 管理和展示服务

 

二、consumer的实现

xml--> ReferenceBean-->ReferenceConfig.createProxy->DubboInvoker->HeaderExchangeClient.request/send

核心概念:proxy refer invoker exchange

 

三、service的实现

xml->ServiceBean->ServiceConfig.export->doExportUrlsFor1Protocol->DubboProtocol.openServer

核心概念:export protocol server

 

四、registry的实现(利用url维护consumer和provider之间的对应关系)

1、订阅

ReferenceConfig->RegistryProtocol.refer->RegistryDirectory.subscribe->ZookeeperRegistry.subscribe

2、注册

内部创建了一个分布式的目录结构

 

五、monitor的实现:

容器内实现了几个pagehandler,对数据进行收集

 

admin

配置、路由等的web修改界面

cluster

多个provider组成的集群的路由、负载均衡、配置

六、核心概念:

1、remoting的层次

  Endpoint->Channel+ChannelHandler + ChannelBuffer->Client + Server->Transporter

  Exchanger:在传输层之上的消息交换的封装,ExchangeXXX对应上面的各个部分

    Response Request ExchangeCodec 完成双向的消息编解码

  HeaderXXX:在Exchanger的基础上,利用消息头来进行通信

2、Rpc

Protocol->Exporter->invoker->Invocation

Exporter 暴露可以被调用的服务

invoker 可以被调用的东西

Invocation 构成一次调用的数据

Protocol(应用层RPC协议) 服务的暴露和使用,除了自己实现的服务之间的调用,还需要和redis、memcache等进行交互,所以抽象出Protocol

Filter  调用过滤器

ProxyFactory 反射的动态代理,目前是javassit或jdk

3、RegistryService:提供注册、订阅等功能

4、PageHandler:对HttpServlet处理逻辑的封装

猜你喜欢

转载自eric-weitm.iteye.com/blog/2371344