分布式服務Dubbo從入門到「精通」之Schema實現
前言
儘管使用了Dubbo許久,但其實對於其了解還是九牛一毛,上個月通讀了Netty實戰(粗略的了解),突然有了解讀Dubbo源碼的慾望,時不待我,那就趕緊開始吧。
熟悉Dubbo的朋友,可能都知道其採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行載入。
當然,如果你不想使用Spring配置,而希望通過API的方式進行調用,Dubbo也是支持的,但是官方是不推薦的(原因你猜)。
今天,就跟大家聊一聊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 編寫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 微服務架構從入門到精通三服務消費者