Dubbo原始碼之服務端的釋出

擊水三千里發表於2019-03-28

Dubbo服務釋出-原理

第一個釋出的動作:暴露本地服務
    Export dubbo service com.alibaba.dubbo.demo.DemoService to local registry, dubbo version: 2.0.0, current host: 127.0.0.1
第二個釋出動作:暴露遠端服務
    Export dubbo service com.alibaba.dubbo.demo.DemoService to url dubbo://192.168.100.38:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&owner=william&pid=8484&side=provider&timestamp=1473908495465, dubbo version: 2.0.0, current host: 127.0.0.1
    Register dubbo service com.alibaba.dubbo.demo.DemoService url dubbo://192.168.100.38:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&monitor=dubbo%3A%2F%2F192.168.48.117%3A2181%2Fcom.alibaba.dubbo.registry.RegistryService%3Fapplication%3Ddemo-provider%26backup%3D192.168.48.120%3A2181%2C192.168.48.123%3A2181%26dubbo%3D2.0.0%26owner%3Dwilliam%26pid%3D8484%26protocol%3Dregistry%26refer%3Ddubbo%253D2.0.0%2526interface%253Dcom.alibaba.dubbo.monitor.MonitorService%2526pid%253D8484%2526timestamp%253D1473908495729%26registry%3Dzookeeper%26timestamp%3D1473908495398&owner=william&pid=8484&side=provider&timestamp=1473908495465 to registry registry://192.168.48.117:2181/com.alibaba.dubbo.registry.RegistryService?application=demo-provider&backup=192.168.48.120:2181,192.168.48.123:2181&dubbo=2.0.0&owner=william&pid=8484&registry=zookeeper&timestamp=1473908495398, dubbo version: 2.0.0, current host: 127.0.0.1
第三個釋出動作:啟動netty
    Start NettyServer bind /0.0.0.0:20880, export /192.168.100.38:20880, dubbo version: 2.0.0, current host: 127.0.0.1
第四個釋出動作:開啟連線zk
    INFO zookeeper.ClientCnxn: Opening socket connection to server /192.168.48.117:2181
第五個釋出動作:到zk註冊
    Register: dubbo://192.168.100.38:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&owner=william&pid=8484&side=provider&timestamp=1473908495465, dubbo version: 2.0.0, current host: 127.0.0.1
第六個釋出動作;監聽zk
    Subscribe: provider://192.168.100.38:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&owner=william&pid=8484&side=provider&timestamp=1473908495465, dubbo version: 2.0.0, current host: 127.0.0.1
    Notify urls for subscribe url provider://192.168.100.38:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&owner=william&pid=8484&side=provider&timestamp=1473908495465, urls: [empty://192.168.100.38:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&owner=william&pid=8484&side=provider&timestamp=1473908495465], dubbo version: 2.0.0, current host: 127.0.0.1

暴露本地服務和暴露遠端服務的區別是什麼?
1.暴露本地服務:指暴露在用一個JVM裡面,不用通過呼叫zk來進行遠端通訊。例如:在同一個服務,自己呼叫自己的介面,就沒必要進行網路IP連線來通訊。
2.暴露遠端服務:指暴露給遠端客戶端的IP和埠號,通過網路來實現通訊。

 

Dubbo服務釋出-整體架構設計圖 

Dubbo服務釋出-整體架構設計圖

 

 

Dubbo的重要概念-proxyFactory

就是為了獲取一個介面的代理類,例如獲取一個遠端介面的代理。
它有2個方法,代表2個作用
  a.getInvoker:針對server端,將服務物件,如DemoServiceImpl包裝成一個Invoker物件。
  b.getProxy  :針對client端,建立介面的代理物件,例如DemoService的介面。

 

Dubbo的重要概念-Wrapper

它類似spring的BeanWrapper,它就是包裝了一個介面或一個類,可以通過wrapper對例項物件進行賦值 取值以及制定方法的呼叫。 

 

Dubbo的重要概念-exporter

維護invoder的生命週期


Dubbo的重要概念-exchanger

資訊交換層,封裝請求響應模式,同步轉非同步。

 

Dubbo的重要概念-transporter

網路傳輸層,用來抽象netty和mina的統一介面。

 

Dubbo的核心級概念-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.

 

 

相關文章