https://github.com/dangdangdotcom/dubboxgit
http://www.sohu.com/a/115234862_464071github
Dubbo是一個來自阿里巴巴的開源分佈式服務框架,噹噹根據自身的需求,爲Dubbo實現了一些新的功能,包括REST風格遠程調用、Kryo/FST序列化等等。並將其命名爲Dubbox(即Dubbo Extensions)web
Demo地址:https://github.com/wosyingjun/DubboxDemoredis
相似範例:http://wosyingjun.iteye.com/blog/2312553瀏覽器
Dubbo架構tomcat
Provider: 暴露服務的服務提供方。服務器
Consumer: 調用遠程服務的服務消費方。架構
Registry: 服務註冊與發現的註冊中心。框架
Monitor: 統計服務的調用次調和調用時間的監控中心。異步
Container: 服務運行容器。
爲何使用Dubbox而不是Dubbo
Dubbo是阿里開源的RPC服務調用框架,已經3年沒有維護了,而噹噹網開源的Dubbox在保證Dubbo原有功能的基礎上作了一系列優化。
使用Dubbox的好處
支持REST風格遠程調用(HTTP + JSON/XML):基於很是成熟的JBoss RestEasy框架,在dubbo中實現了REST風格(HTTP + JSON/XML)的遠程調用,以顯著簡化企業內部的跨語言交互,同時顯著簡化企業對外的Open API、無線API甚至AJAX服務端等等的開發。事實上,這個REST調用也使得Dubbo能夠對當今特別流行的「微服務」架構提供基礎性支持。 另外,REST調用也達到了比較高的性能,在基準測試下,HTTP + JSON與Dubbo 2.x默認的RPC協議(即TCP + Hessian2二進制序列化)之間只有1.5倍左右的差距。
支持基於Kryo和FST的Java高效序列化實現:基於當今比較知名的Kryo和FST高性能序列化庫,爲Dubbo默認的RPC協議添加新的序列化實現,並優化調整了其序列化體系,比較顯著的提升了Dubbo RPC的性能。
支持基於Jackson的JSON序列化:基於業界應用最普遍的Jackson序列化庫,爲Dubbo默認的RPC協議添加新的JSON序列化實現。
支持基於嵌入式Tomcat的HTTP remoting體系:基於嵌入式tomcat實現dubbo的HTTP remoting體系(即dubbo-remoting-http),用以逐步取代Dubbo中舊版本的嵌入式Jetty,能夠顯著的提升REST等的遠程調用性能,並將Servlet API的支持從2.5升級到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等協議都基於這個HTTP remoting體系)。
升級Spring:將dubbo中Spring由2.x升級到目前最經常使用的3.x版本,減小版本衝突帶來的麻煩。
升級ZooKeeper客戶端:將dubbo中的zookeeper客戶端升級到最新的版本,以修正老版本中包含的bug。
支持徹底基於Java代碼的Dubbo配置:基於Spring的Java Config,實現徹底無XML的純Java代碼方式來配置dubbo
調整Demo應用:暫時將dubbo的demo應用調整並改寫以主要演示REST功能、Dubbo協議的新序列化方式、基於Java代碼的Spring配置等等。
注:Dubbox和Dubbo 2.X是兼容的,沒有改變Dubbo的任何已有的功能和配置方式(除了升級了Spring之類的版本)
DubboxDemo項目的安裝
Git Clone https://github.com/dangdangdotcom/dubbox
Checkout出來的Dubbox經過Maven編譯並安裝到本地倉庫。
Zookeeper安裝,做爲dubbox的註冊中心,見:ZooKeeper 高可用集羣的安裝及配置
修改配置文件地址<dubbo:registry protocol="zookeeper" address="zookeeper://xxxxxxxxx">。
直接運行ProviderTest類啓動服務發佈者。
直接運行ConsumerTest類啓動服務消費者。
補充:
若是dubbo protocol配置爲rest的,能夠直接經過瀏覽器訪問http://xxx.xx.xx.xx:8080/user/getUserByPhone/1888888888
服務提供者最終打成jar時建議將啓動類設置爲com.alibaba.dubbo.container.Main,具體可見Provider的pom.xml
Dubbox支持的遠程調用協議
dubbo:採用單一長鏈接和NIO異步通信,基於TCP協議,默認基於netty框架進行傳輸,Hessian二進制序列化。
RMI:短鏈接同步傳輸,基於TCP協議,Java標準二進制序列化。
Hessian:短鏈接同步傳輸,基於HTTP協議,缺省內嵌Jetty做爲服務器實現,Hessian二進制序列化。
http:短鏈接同步傳輸,基於HTTP協議,採用Spring的HttpInvoker實現,表單序列化。
webservice:短鏈接同步傳輸,基於HTTP協議,基於CXF實現,SOAP文本序列化。
thrift:thrift rpc框架。
memcached:採用KV存儲的方式傳輸數據。
redis:採用KV存儲的方式傳輸數據。
rest:dubbox提供,HTTP + JSON/XML,可內嵌tomcat實現http remoting體系。
Dubbox支持的序列化方式比較
推薦協議配置 <dubbo:protocol name="dubbo" serialization="kryo" port="20990" /> <dubbo:protocol name="rest" port="8080" server="tomcat" /> 參考
https://github.com/dangdangdotcom/dubbox
http://dubbo.io/User+Guide-zh.htm返回搜狐,查看更多