一、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處理邏輯的封裝