Dubbo

Dubbo是什么?
Dubbo是一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo采用的是一種非常簡單的模型,要么是提供方提供服務,要么是消費方消費服務,所以基于這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。


Dubbo能做什么?
透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。
軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點。
服務自動注冊與發(fā)現(xiàn),不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務提供者。


Dubbo架構

Dubbo框架結構.png

節(jié)點角色說明:
· **Provider: **暴露服務的服務提供方。
· **Consumer: **調用遠程服務的服務消費方。
· **Registry: **服務注冊與發(fā)現(xiàn)的注冊中心。
· **Monitor: **統(tǒng)計服務的調用次調和調用時間的監(jiān)控中心。
· **Container: **服務運行容器。
調用關系說明:

  1. 服務容器負責啟動,加載,運行服務提供者。
  2. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。
  3. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
  4. 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者。
  5. 服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
  6. 服務消費者和提供者,在內存中累計調用次數(shù)和調用時間,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心。
    Dubbo提供了很多協(xié)議,Dubbo協(xié)議、RMI協(xié)議、Hessian協(xié)議,Dubbo源代碼有各種協(xié)議的實現(xiàn),我們之前沒用Dubbo之前時,大部分都用Hessian來使用我們服務的暴露和調用,利用HessianProxyFactory調用遠程接口。

Dubbo與Zookeeper、SpringMVC整合使用

  1. 安裝Zookeeper
    文檔:http://idealmine.iteye.com/blog/2307762
    或:http://www.lxweimin.com/p/0ba61bf7149f
    Zookeeper作為Dubbo服務的注冊中心,Dubbo原先基于數(shù)據(jù)庫的注冊中心,沒采用Zookeeper,Zookeeper一個分布式的服務框架,是樹型的目錄服務的數(shù)據(jù)存儲,能做到集群管理數(shù)據(jù) ,這里能很好的作為Dubbo服務的注冊中心,Dubbo能與Zookeeper做到集群部署,當提供者出現(xiàn)斷電等異常停機時,Zookeeper注冊中心能自動刪除提供者信息,當提供者重啟時,能自動恢復注冊數(shù)據(jù)

  2. 配置dubbo-admin的管理頁面
    (1)下載dubbo-admin-2.x.war,或到github下載源碼自己編譯生成war,部署在tomcat的webapps/ROOT下
    (2)然后到webapps/ROOT/WEB-INF下,有一個dubbo.properties文件,里面指向Zookeeper ,使用的是Zookeeper 的注冊中心

    properties.png

    (3) 然后啟動tomcat服務,用戶名和密碼:root,并訪問服務,顯示登陸頁面,說明dubbo-admin部署成功
    index.png

    注:啟動失敗報錯create bean失敗,有可能是jdk版本與(war的編譯環(huán)境jdk版本)不一致造成

  3. SpringMVC與Dubbo的整合
    項目結構如下

    code.png

    說明:
    (1)dubbo-demo-api項目加入了一個服務接口

package com.ideal.dubbo;  
/** 
 * @author ideal 
 * @since 16/6/28. 
 */  
public interface DemoService {  
    String sayHello(String name);  
}

(2)dubbo-demo-provider:服務提供者,pom依賴api
在服務提供方實現(xiàn)接口:

package com.ideal.dubbo.provider;   
import com.ideal.dubbo.DemoService;  
public class DemoServiceImpl implements DemoService {  
    public String sayHello(String name) {  
        return "Hello " + name;  
    }  
} 

用Spring配置聲明暴露服務:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd  
                             http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  
    <!-- 具體的實現(xiàn)bean -->  
    <bean id="demoService" class="com.ideal.dubbo.provider.DemoServiceImpl"/>  
  
    <!-- 提供方應用信息,用于計算依賴關系 -->  
    <dubbo:application name="ideal-dubbo-demo-provider"/>  
  
    <!-- 使用multicast廣播注冊中心暴露服務地址 -->  
    <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->  
  
    <!-- 使用zookeeper注冊中心暴露服務地址 -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>  
  
    <!-- 用dubbo協(xié)議在20880端口暴露服務 -->  
    <dubbo:protocol name="dubbo" port="20880"/>  
  
    <!-- 聲明需要暴露的服務接口 -->  
    <dubbo:service interface="com.ideal.dubbo.DemoService" ref="demoService"/>  
</beans>

加載Spring配置啟動服務提供者:

package com.ideal.dubbo.provider;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
/** 
 * @author ideal 
 * @since 16/6/28. 
 */   
public class Provider {  
    public static void main(String[] args) throws Exception {  
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"conf/app-conf.xml"});  
        context.start();  
        System.out.println("start");  
        System.in.read(); // 按任意鍵退出  
    }  
}  

(3)dubbo-demo-consumer:服務消費者,pom依賴api
用Spring配置聲明訂閱服務:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd  
                             http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
    <!-- 提供方應用信息,用于計算依賴關系 -->  
    <dubbo:application name="ideal-dubbo-demo-consumer"/>  
    <!-- 使用zookeeper注冊中心獲取暴露服務地址 -->  
    <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>  
    <!-- 生成遠程服務代理,可以像使用本地bean一樣使用demoService -->  
    <dubbo:reference id="demoService" interface="com.ideal.dubbo.DemoService"/>  
</beans> 

**(4)運行main方法啟動服務者與消費者,進入dubbo管理頁面


dubboadim.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容

  • Dubbo是什么 Dubbo是Alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式...
    Coselding閱讀 17,247評論 3 196
  • 1.背景 想象下這么個場景: 有個做生活服務的APP,主要提供一些生活化的咨詢信息,比如天氣、新聞、個人三金賬單、...
    點融黑幫閱讀 3,900評論 0 33
  • 不久前,我們討論過Nginx+tomcat組成的集群,這已經是非常靈活的集群技術,但是當我們的系統(tǒng)遇到更大的瓶頸,...
    rthsfjhtrj閱讀 1,594評論 0 26
  • 收獲:1、大人和這個社會都在要求獨自尊重,那么孩子要求村中就更沒有錯。 2、懲罰孩子和嬌縱孩子都不能幫助孩子發(fā)展七...
    出塵水閱讀 198評論 0 0
  • 班室獨居夜來雨 掀窗霜生顯天低 春光白日垂柳枝 憂怕園春隨夜去
    山上丑石閱讀 139評論 0 0