Dubbo源碼分析(一)啓動Provider

Dubbo是阿里巴巴開源的一個分佈式服務框架,在阿里內部和其他公司都有廣泛的應用,是目前比較成熟的一個服務框架。筆者將從源碼層面對Dubbo進行分析,學習其中優秀的設計。

經過數年的沉澱,Dubbo整體的設計和抽象已非常完善,這裏介紹的Provider啓動就涉及到了多個抽象模型。本文使用的版本爲2.5.3。

首先,當發佈一個服務的Server時,我們需要編寫一個Spring配置文件。

其中關鍵的一行爲<dubbo:service …>,這裏使用了擴展的Spring Schema,相關定義在Dubbo jar包META-INF目錄下的spring.handlers、spring.schemas、dubbo.xsd中。指定的配置解析器爲com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler,所以它也就成了啓動provider的“應用程序入口”

DubboNamespaceHandler的邏輯很簡單,就是將xml文件中的配置信息轉換成對應的bean,繼續看關鍵的com.alibaba.dubbo.config.spring.ServiceBean

經過大段配置代碼後來到父類ServiceConfig的export()方法,它將啓動負責provider網絡通信的Server並將服務地址發佈出去。最終調用到doExportUrlsFor1Protocol()

  • Invoker – 執行具體的遠程調用
  • Protocol – 服務地址的發佈和訂閱
  • Exporter – 暴露服務的引用,或取消暴露

Protocol的具體實現類由配置指定,默認創建一個DubboProtocol,其export()方法轉到openServer()與createServer()

requestHandler包含通信協議的主要處理邏輯,而server的創建來自Exchangers

getExchanger()獲取的實例也來源於配置,默認返回HeaderExchanger

可以看到Server與Client實例均是在這裏創建的,HeaderExchangeServer需要一個Server類型的參數,來自Transporters.bind()

getTransporter()獲取的實例來源於配置,默認返回一個NettyTransporter

最終來到了NettyServer,在它的doOpen()方法中看到了我們熟悉的Netty Bootstrap

文中提到的核心類包括

  1. DubboNamespaceHandler
  2. ServiceBean
  3. ServiceConfig
  4. DubboProtocol
  5. Exchangers
  6. HeaderExchanger
  7. HeaderExchangeServer
  8. NettyTransporter
  9. NettyServer

至此,所有Provider啓動的工作結束了,接下來就是接收請求並交給handler處理的過程,這些將在後面的文章予以介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章