一、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处理逻辑的封装