天天看點

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的重要操作對象,重點是寫操作。)

繼續閱讀