Dubbo重要概念介紹
1.proxyFactory:就是為了獲取一個介面的代理類,例如獲取一個遠端介面的代理。
它有2個方法,代表2個作用
a.getInvoker:針對server端,將服務物件,如DemoServiceImpl包裝成一個Invoker物件。
b.getProxy :針對client端,建立介面的代理物件,例如DemoService的介面。
2.Wrapper:它類似spring的BeanWrapper,它就是包裝了一個介面或一個類,可以通過wrapper對例項物件進行賦值 取值以及制定方法的呼叫。
3.Invoker:它是一個可執行的物件,能夠根據方法的名稱、引數得到相應的執行結果。
它裡面有一個很重要的方法 Result invoke(Invocation invocation),
Invocation是包含了需要執行的方法和引數等重要資訊,目前它只有2個實現類RpcInvocation MockInvocation
它有3種類型的Invoker
1.本地執行類的Invoker
server端:要執行 demoService.sayHello,就通過InjvmExporter來進行反射執行demoService.sayHello就可以了。
2.遠端通訊類的Invoker
client端:要執行 demoService.sayHello,它封裝了DubboInvoker進行遠端通訊,傳送要執行的介面給server端。
server端:採用了AbstractProxyInvoker執行了DemoServiceImpl.sayHello,然後將執行結果返回傳送給client.
3.多個遠端通訊執行類的Invoker聚合成叢集版的Invoker
client端:要執行 demoService.sayHello,就要通過AbstractClusterInvoker來進行負載均衡,DubboInvoker進行遠端通訊,傳送要執行的介面給server端。
server端:採用了AbstractProxyInvoker執行了DemoServiceImpl.sayHello,然後將執行結果返回傳送給client.
4.Protocol
1.export:暴露遠端服務(用於服務端),就是將proxyFactory.getInvoker建立的代理類 invoker物件,通過協議暴露給外部。
2.refer:引用遠端服務(用於客戶端), 通過proxyFactory.getProxy來建立遠端的動態代理類,例如DemoService的遠端動態介面。
5.exporter:維護invoder的生命週期。
6.exchanger:資訊交換層,封裝請求響應模式,同步轉非同步。
7.transporter:網路傳輸層,用來抽象netty和mina的統一介面。
8.Directory:目錄服務
StaticDirectory:靜態目錄服務,他的Invoker是固定的。
RegistryDirectory:註冊目錄服務,他的Invoker集合資料來源於zk註冊中心的,他實現了NotifyListener介面,並且實現回撥notify(List<URL> urls),
整個過程有一個重要的map變數,methodInvokerMap(它是資料的來源;同時也是notify的重要操作物件,重點是寫