Dubbo的幾種啟動方式

Dubbo可以通過Spring xml中配置宰掉、Spring Annotation以及Api的方式來啟動懈糯。服務(wù)提供方最終啟動的核心邏輯為ServiceConfig.export(),調(diào)用方的核心邏輯為ReferenceConfig.get(),本文主要分析不同的方式啟動到核心邏輯之心的過程个从,至于啟動到后續(xù)細節(jié)將在后續(xù)文章中發(fā)布格二。

1.Api啟動方式

通過Api啟動是Dubbo最不常用的啟動方式瑰剃,因為暴露了一些實現(xiàn)細節(jié)齿诉,但是確是最直接的啟動方式,是理解Spring的兩種方式啟動的基礎(chǔ)晌姚,所以在這里先進行介紹粤剧。

1.基礎(chǔ)配置類

Dubbo使用大量配置類來保存服務(wù)的配置信息,最關(guān)鍵(也是必須進行配置)的幾個配置類如下:
ServiceConfig:服務(wù)提供方的服務(wù)配置挥唠,包含了應(yīng)用配置ApplicationConfig抵恋、使用協(xié)議配置ProtocolConfig、注冊中心配置RegistryConfig等多種配置宝磨,服務(wù)通過ServiceConfig.export進行暴露弧关。
ReferenceConfig:服務(wù)調(diào)用方的調(diào)用配置,包含了應(yīng)用配置ApplicationConfig唤锉、注冊中心配置RegistryConfig等多種配置世囊,ReferenceConfig不用配置ProtocolConfig,服務(wù)發(fā)布者的信息是從注冊中心獲取的窿祥。
ApplicationConfig:應(yīng)用配置類茸习,配置應(yīng)用的基本信息如應(yīng)用名,版本號壁肋,組織名等
RegistryConfig:注冊中心号胚,配置連接的注冊中心信息,地址浸遗,
dubbo常用的注冊中心有Zookeeper,Redis,Multicast等
ProtocolConfig:服務(wù)協(xié)議配置猫胁,配置服務(wù)接口使用的協(xié)議,如dubbo跛锌、http等弃秆,服務(wù)暴露的端口等届惋。

2.服務(wù)發(fā)布端啟動流程

主要是配置好ServiceConfig,RegistryConfig菠赚,ApplicationConfig脑豹,ProtocolConfig的基本信息,然后通過ServiceConfig.export()進行發(fā)布衡查,代碼如下:

ServiceConfig<TestService> serviceConfig = new ServiceConfig<TestService>();
        ApplicationConfig application = new ApplicationConfig("api-provider");
        serviceConfig.setApplication(application);
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName("dubbo");
        protocol.setPort(20880);
        serviceConfig.setProtocol(protocol);
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://ip:2181");
        registry.setTimeout(3000);
        serviceConfig.setRegistry(registry);
serviceConfig.setInterface(TestService.class);
                //服務(wù)端接口實現(xiàn)邏輯
        serviceConfig.setRef(new TestServiceImpl());

3.服務(wù)引用方啟動流程

主要是配置好ReferenceConfig瘩欺,RegistryConfig,ApplicationConfig的信息拌牲,調(diào)用ReferenceConfig.get()獲取代理對象進行遠程調(diào)用俱饿,代碼如下:

ReferenceConfig<TestService> referenceConfig = new ReferenceConfig<TestService>();
        ApplicationConfig application = new ApplicationConfig("consumer-api");
        referenceConfig.setApplication(application);
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://ip:2181");
        registry.setTimeout(3000);
        referenceConfig.setRegistry(registry);
        referenceConfig.setInterface(TestService.class);
        TestService test = referenceConfig.get()

4.接口直連

以上代碼是通過zookeeper注冊中心來進行服務(wù)注冊和發(fā)現(xiàn)的,服務(wù)提供方和調(diào)用方解耦塌忽,并且能夠動態(tài)上下線和負載均衡拍埠,是比較好的實現(xiàn)方式,如果不想引人注冊中心土居,還可以在調(diào)用方寫死發(fā)布方URL進行直連枣购。

ReferenceConfig<TestService> referenceConfig = new ReferenceConfig<TestService>();
ApplicationConfig application = new ApplicationConfig("consumer-api");
referenceConfig.setApplication(application);
RegistryConfig registry = new RegistryConfig();
//禁用注冊中心
registry.setAddress(RegistryConfig.NO_AVAILABLE);
registry.setTimeout(3000);
referenceConfig.setRegistry(registry);
referenceConfig.setInterface(TestService.class);
//設(shè)置直連的地址,協(xié)議擦耀,ip和端口坷虑,組裝成url格式
referenceConfig.setUrl("dubbo://localhost:20880");
TestService test = referenceConfig.get()

2.Spring xml配置啟動

了解了Api啟動方式,對Spring啟動dubbo的理解就比較容易了埂奈,主要是配置ApplicationConfig迄损,RegistryConfig,ProtocolConfig账磺,ServiceConfig芹敌,ReferenceConfig成為spring的bean,然后在spring啟動時調(diào)用ServiceConfig.export()和ReferenceConfig.get()來發(fā)布和引用服務(wù):
配置如下:
發(fā)布端:

<dubbo:application name="provider"/>
<dubbo:registry address="zookeeper://ip:2181" timeout="3000"/>
<dubbo:protocol name="dubbo" port="20880" host="127.0.0.1"/>
<dubbo:service interface="com.provider.service.TestService" class="com.provider.service.TestServiceImpl"/>

調(diào)用端:

<dubbo:application name="consumer"/>
<dubbo:registry address="zookeeper://ip:2181" timeout="3000"/>
<dubbo:reference interface="com.provider.service.TestService" id="dbRef"/>

ServiceConfig, ReferenceConfig在spring中通過子類ServiceBean和ReferenceBean來實現(xiàn),這樣能夠通過實現(xiàn)Spring bean的生命周期函數(shù)來進行相應(yīng)處理垮抗。

3.Spring 注解配置啟動

和xml配置類似氏捞,通過注解的方式向spring注入ApplicationConfig,RegistryConfig冒版,ProtocolConfig液茎,ServiceConfig,ReferenceConfig等bean辞嗡,在spring配置類上注解@EnableDubbo來啟用dubbo捆等,@DubboComponentScan來配置db組件目錄,@Service注解被發(fā)布的接口實現(xiàn),@Reference來飲用遠程接口续室。
提供方:

@Configuration
@EnableDubbo
@DubboComponentScan("com.test")
public class SpringCfg {
    public static void main(String[] args)
    {
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringCfg.class);
        LockSupport.park();
    }
    
    @Bean("dubbo-provider")
    public ApplicationConfig apc()
    {
        ApplicationConfig apc = new ApplicationConfig();
        apc.setName("dubbo-provider");
        return apc;
    }
    
    @Bean("dubbo")
    public ProtocolConfig pc()
    {
        ProtocolConfig apc = new ProtocolConfig();
        apc.setName("dubbo");
        apc.setPort(20880);
        return apc;
    }
    
    @Bean
    public RegistryConfig rc()
    {
        RegistryConfig rc = new RegistryConfig();
        rc.setAddress("zookeeper://ip:2181");
        return rc;
    }
}
@Service
public class DubboService implements TestService{
    @Override
    public void test() {
        System.err.println("test");
    }

}

調(diào)用方:

@Component
public class AnoConsumer {
    @Reference
    TestService mTestService;
    
    public void test()
    {
        mTestService.test();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栋烤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挺狰,更是在濱河造成了極大的恐慌明郭,老刑警劉巖买窟,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異薯定,居然都是意外死亡始绍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門话侄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亏推,“玉大人,你說我怎么就攤上這事满葛。” “怎么了罢屈?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵嘀韧,是天一觀的道長。 經(jīng)常有香客問我缠捌,道長锄贷,這世上最難降的妖魔是什么朱灿? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任盔沫,我火速辦了婚禮,結(jié)果婚禮上馍乙,老公的妹妹穿的比我還像新娘哑芹。我一直安慰自己炎辨,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布聪姿。 她就那樣靜靜地躺著碴萧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪末购。 梳的紋絲不亂的頭發(fā)上破喻,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音盟榴,去河邊找鬼曹质。 笑死,一個胖子當著我的面吹牛擎场,可吹牛的內(nèi)容都是我干的羽德。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼迅办,長吁一口氣:“原來是場噩夢啊……” “哼玩般!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起礼饱,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤坏为,失蹤者是張志新(化名)和其女友劉穎究驴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匀伏,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡洒忧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了够颠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熙侍。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖履磨,靈堂內(nèi)的尸體忽然破棺而出蛉抓,到底是詐尸還是另有隱情,我是刑警寧澤剃诅,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布巷送,位于F島的核電站,受9級特大地震影響矛辕,放射性物質(zhì)發(fā)生泄漏笑跛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一聊品、第九天 我趴在偏房一處隱蔽的房頂上張望飞蹂。 院中可真熱鬧,春花似錦翻屈、人聲如沸陈哑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芥颈。三九已至,卻和暖如春赚抡,著一層夾襖步出監(jiān)牢的瞬間爬坑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工涂臣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盾计,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓赁遗,卻偏偏與公主長得像署辉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岩四,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容