當前位置:
首頁 > 知識 > 分布式服務Dubbo從入門到「精通」之Schema實現

分布式服務Dubbo從入門到「精通」之Schema實現

前言

儘管使用了Dubbo許久,但其實對於其了解還是九牛一毛,上個月通讀了Netty實戰(粗略的了解),突然有了解讀Dubbo源碼的慾望,時不待我,那就趕緊開始吧。

熟悉Dubbo的朋友,可能都知道其採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行載入。

當然,如果你不想使用Spring配置,而希望通過API的方式進行調用,Dubbo也是支持的,但是官方是不推薦的(原因你猜)。

今天,就跟大家聊一聊Dubbo是如何基於Schema實現的。

準備

分布式服務Dubbo從入門到「精通」之Schema實現

具體實現,需要使用到一下幾個配置或者是類:

spring.handlers:解析所使用的類

spring.schemas:自定義標籤的路徑

DubboNamespaceHandler.java:處理器

DubboBeanDefinitionParser.java:解析器

xxxxConfig.java:JavaBean建模

實現

這裡我們以dubbo:application做案例介紹

實體類ApplicationConfig.java

位於com.alibaba.dubbo.config包下,截取部分代碼:

public class ApplicationConfig extends AbstractConfig { private static final long serialVersionUID = 5508512956753757169L; private String name; private String version; private String owner; private String organization; private String architecture; private String environment; private String compiler; private String logger; private List registries; private MonitorConfig monitor; private Boolean isDefault; public ApplicationConfig() {

編寫dubbo.xsd文件

位於META-INF下,截取部分代碼:

關於xsd:schema的各個屬性具體含義就不作過多陳述,大家可以參見

http://www.w3school.com.cn/schema/schema_elements_ref.asp

DubboBeanDefinitionParser和DubboNamespaceHandler實現解析

DubboNamespaceHandler會根據schema和節點名找到某個DubboBeanDefinitionParser,然後由DubboBeanDefinitionParser完成具體的解析工作。因此需要分別繼承NamespaceHandlerSupport和實現BeanDefinitionParser類。

兩個類都位於com.alibaba.dubbo.config.spring.schema包下,以下是DubboNamespaceHandler部分代碼:

public class DubboNamespaceHandler extends NamespaceHandlerSupport {

DubboBeanDefinitionParser由於太長了,大家自行查閱源碼。

定製spring.handlers和spring.schemas

編碼完畢之後,還需要做一些配置工作。我們必須告訴Spring我們準備使用自定義的標籤元素,告訴Spring如何解析元素,否則Spring沒那麼聰明。這裡需要2個配置文件,spring.handlers和spring.schemas(位於META-INF下即可),用於告訴Spring自定義標籤的文檔結構以及解析它的類。兩個文件內容分別如下:

spring.handlers:

http://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd

spring.schemas:

http://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

注意 是轉義,一定要加,不然會提示報錯。

spring-context-dubbo.xml

好了,最終呈現給大家的就是這個樣子:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲棲社區 的精彩文章:

阿里人工智慧實驗室王剛:找到合適的應用場景是實現人工智慧商業化的關鍵點
淺談Greenplum的Boolean類型與Text類型之間的轉換
簡易數據恢復方案實戰:流程和工具
高清大圖!淘寶造物節,「奇市江湖」里那些腦洞大開的創意產品

TAG:雲棲社區 |

您可能感興趣

《ZooKeeper分散式專題與Dubbo微服務入門》
Facebook正推出視頻服務,與谷歌YouTube分一杯羹
Merlin拋售全部Spotify股票 YouTube推出全新付費服務YouTube Premium
Google發布YouTube音樂和YouTube Premium服務
Facebook宣布關停Moves、Hello、tbh三項服務
GlobalFoundries宣布成立Avera Semi全資子公司,聚焦ASIC服務
Facebook面向全球用戶開放Watch視頻服務
Rackspace推出Kubernetes即服務產品,並收購RelationEdge
使用BurpSuite的Collaborator查找.Onion隱藏服務的真實IP地址
從遠程桌面服務到獲取Empire Shell
Facebook 推出遊戲直播服務 Fb.gg,對標 Twitch
Google正式集成Kubernetes引擎與GPU服務
Uber推出Eats for Business商務訂餐服務
強龍不壓地頭蛇:GrabFood正式接替UberEats推出送餐服務
印度政府壓下了 Facebook 在該國推出 WhatsApp 支付服務的計劃
Instagram發布新視頻服務挑戰YouTube
Facebook宣布將上線其首個約會服務Date
Spotify 的免費訂閱服務是它與 Apple Music 競爭的主武器
uCloudlink 推出創新移動數據服務 「GlocalMe Inside」
spring-cloud 2.0 微服務架構從入門到精通三服務消費者