Dubbo 入門

Dubbo介紹

  • Dubbo是阿里開源的分布式服務(wù)框架舰褪,致力于提供高性能和透明化的RPC遠程服務(wù)調(diào)用方案捆蜀,以及SOA(Service Oriented Architecture面向服務(wù)的架構(gòu))服務(wù)治理方案。

Dubbo定位:一款RPC框架
這就和springcloud區(qū)別開來了叠洗。springcloud的目標是微服務(wù)架構(gòu)下的一站式解決方案止喷。


其核心功能:
遠程通訊:提供對多種基于長連接的NIO框架抽象封裝塞茅,包括多種線程模型,序列化震蒋,以及“請求-響應(yīng)”模式的信息交換方式
集群容錯:提供基于接口方法的透明遠程過程調(diào)用茸塞,包括多協(xié)議支持,以及軟負載均衡查剖,失敗容錯钾虐,地址路由,動態(tài)配置等集群支持
自動發(fā)現(xiàn):基于注冊中心目錄服務(wù)笋庄,使服務(wù)消費方能動態(tài)的查找服務(wù)提供方效扫,使地址透明,使服務(wù)提供方可以平滑增加或減少機器

為什么選擇Dubbo

隨著互聯(lián)網(wǎng)的發(fā)展直砂,網(wǎng)站應(yīng)用的規(guī)模不斷擴大菌仁,常規(guī)的垂直應(yīng)用架構(gòu)已無法應(yīng)對,分布式服務(wù)架構(gòu)以及流動計算架構(gòu)勢在必行哆键,亟需一個治理系統(tǒng)確保架構(gòu)有條不紊的演進掘托。
單一應(yīng)用架構(gòu)

當網(wǎng)站流量很小時,只需一個應(yīng)用籍嘹,將所有功能都部署在一起闪盔,以減少部署節(jié)點和成本弯院。此時,用于簡化增刪改查工作量的數(shù)據(jù)訪問框架(ORM)是關(guān)鍵泪掀。

垂直應(yīng)用架構(gòu)

當訪問量逐漸增大听绳,單一應(yīng)用增加機器帶來的加速度越來越小,提升效率的方法之一是將應(yīng)用拆成互不相干的幾個應(yīng)用异赫,以提升效率椅挣。此時,用于加速前端頁面開發(fā)的Web框架(MVC)是關(guān)鍵塔拳。

分布式應(yīng)用架構(gòu)

當垂直應(yīng)用越來越多鼠证,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來靠抑,作為獨立的服務(wù)量九,逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場需求颂碧。此時荠列,用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)是關(guān)鍵。

流計算架構(gòu)

當服務(wù)越來越多载城,容量的評估肌似,小服務(wù)資源的浪費等問題逐漸顯現(xiàn),此時需增加一個調(diào)度中心基于訪問壓力實時管理集群容量诉瓦,提高集群利用率川队。此時,用于提高機器利用率的資源調(diào)度和治理中心(SOA)是關(guān)鍵


以上是從架構(gòu)層面分析應(yīng)用的演變歷程睬澡,那么從實際的開發(fā)者角度來看的話呼寸,我們也可以這么分析:

  • 單一應(yīng)用架構(gòu)
  • 應(yīng)用和數(shù)據(jù)庫單獨部署
  • 應(yīng)用和數(shù)據(jù)庫集群部署
  • 數(shù)據(jù)庫壓力變大,讀寫分離
  • 使用緩存技術(shù)加快速度
  • 數(shù)據(jù)庫分庫分表
  • 應(yīng)用按照類型進行拆分
  • 等等

應(yīng)用發(fā)展到這個階段猴贰,我們發(fā)現(xiàn)應(yīng)用和應(yīng)用之間的關(guān)系已經(jīng)十分復(fù)雜了对雪,就會出現(xiàn)以下問題:

  1. 當服務(wù)越來越多時,服務(wù) URL 配置管理變得非常困難米绕,F(xiàn)5 硬件負載均衡器的單點壓力也越來越大瑟捣。 此時需要一個服務(wù)注冊中心,動態(tài)地注冊和發(fā)現(xiàn)服務(wù)栅干,使服務(wù)的位置透明迈套。并通過在消費方獲取服務(wù)提供方地址列表,實現(xiàn)軟負載均衡和 Failover(集群容錯的一種方式)碱鳞,降低對 F5 硬件負載均衡器的依賴桑李,也能減少部分成本;

  2. 進一步發(fā)展,服務(wù)間依賴關(guān)系變得錯蹤復(fù)雜贵白,甚至分不清哪個應(yīng)用要在哪個應(yīng)用之前啟動率拒,架構(gòu)師都不能完整的描述應(yīng)用的架構(gòu)關(guān)系。 這時禁荒,需要自動畫出應(yīng)用間的依賴關(guān)系圖猬膨,以幫助架構(gòu)師理清關(guān)系;

  3. 接著呛伴,服務(wù)的調(diào)用量越來越大勃痴,服務(wù)的容量問題就暴露出來,這個服務(wù)需要多少機器支撐热康?什么時候該加機器沛申? 為了解決這些問題,第一步姐军,要將服務(wù)現(xiàn)在每天的調(diào)用量污它,響應(yīng)時間,都統(tǒng)計出來庶弃,作為容量規(guī)劃的參考指標。其次德澈,要可以動態(tài)調(diào)整權(quán)重歇攻,在線上,將某臺機器的權(quán)重一直加大梆造,并在加大的過程中記錄響應(yīng)時間的變化缴守,直到響應(yīng)時間到達閾值,記錄此時的訪問量镇辉,再以此訪問量乘以機器數(shù)反推總?cè)萘俊?/p>

以上是 Dubbo 最基本的幾個需求屡穗。

[圖片上傳失敗...(image-9eaf56-1604481906145)]

從上面的Dubbo服務(wù)治理圖我們可以看到,Dubbo很好的解決了上面所出現(xiàn)的問題忽肛。所以村砂,當你的架構(gòu)發(fā)展到這種階段的時候,就需要考慮使用Dubbo了屹逛。

Dubbo框架

一础废、技術(shù)架構(gòu)
[圖片上傳失敗...(image-affea9-1604481906145)]

上面就是Dubbo的技術(shù)架構(gòu),看起來似乎很簡單罕模,實際上里面的細節(jié)很復(fù)雜喲评腺。

節(jié)點 角色說明
Provider 暴露服務(wù)的服務(wù)提供方
Consumer 調(diào)用服務(wù)的服務(wù)消費方
Registry 服務(wù)注冊與發(fā)現(xiàn)的注冊中心
Monitor 統(tǒng)計服務(wù)調(diào)用次數(shù)和調(diào)用時間的監(jiān)控中心
Container 服務(wù)運行容器

調(diào)用關(guān)系說明:

  1. 服務(wù)容器負責啟動,加載淑掌,運行服務(wù)提供者
  2. 服務(wù)提供者在啟動時蒿讥,向注冊中心注冊自己提供的服務(wù)
  3. 服務(wù)消費者在啟動時,向注冊中心訂閱自己所需的服務(wù)
  4. 注冊中心返回服務(wù)提供者地址列表給消費者,如有變更芋绸,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者
  5. 服務(wù)消費者媒殉,從提供者地址列表中,基于軟負載均衡算法侥钳,選一臺提供者進行調(diào)用适袜,如果調(diào)用失敗,再選另一臺調(diào)用
  6. 服務(wù)消費者和提供者舷夺,在內(nèi)存中累計調(diào)用冊數(shù)和調(diào)用事件苦酱,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心

二、Dubbo特點

Dubbo 架構(gòu)具有以下幾個特點给猾,分別是連通性疫萤、健壯性、伸縮性敢伸、以及向未來架構(gòu)的升級性扯饶。

連通性

  • 注冊中心負責服務(wù)地址的注冊與查找,相當于目錄服務(wù)池颈,服務(wù)提供者和消費者只在啟動時與注冊中心交互尾序,注冊中心不轉(zhuǎn)發(fā)請求,壓力較小
  • 監(jiān)控中心負責統(tǒng)計各服務(wù)調(diào)用次數(shù)躯砰,調(diào)用時間等每币,統(tǒng)計先在內(nèi)存匯總后每分鐘一次發(fā)送到監(jiān)控中心服務(wù)器,并以報表展示
  • 服務(wù)提供者向注冊中心注冊其提供的服務(wù)琢歇,并匯報調(diào)用時間到監(jiān)控中心兰怠,此時間不包含網(wǎng)絡(luò)開銷服務(wù)
  • 消費者向注冊中心獲取服務(wù)提供者地址列表,并根據(jù)負載算法直接調(diào)用提供者李茫,同時匯報調(diào)用時間到監(jiān)控中心揭保,此時間包含網(wǎng)絡(luò)開銷
  • 注冊中心,服務(wù)提供者魄宏,服務(wù)消費者三者之間均為長連接秸侣,監(jiān)控中心除外
  • 注冊中心通過長連接感知服務(wù)提供者的存在,服務(wù)提供者宕機宠互,注冊中心將立即推送事件通知消費者
  • 注冊中心和監(jiān)控中心全部宕機塔次,不影響已運行的提供者和消費者,消費者在本地緩存了提供者列表
  • 注冊中心和監(jiān)控中心都是可選的名秀,服務(wù)消費者可以直連服務(wù)提供者

健壯性

  • 監(jiān)控中心宕掉不影響使用励负,只是丟失部分采樣數(shù)據(jù)
  • 數(shù)據(jù)庫宕掉后,注冊中心仍能通過緩存提供服務(wù)列表查詢匕得,但不能注冊新服務(wù)
  • 注冊中心對等集群继榆,任意一臺宕掉后巾表,將自動切換到另一臺
  • 注冊中心全部宕掉后,服務(wù)提供者和服務(wù)消費者仍能通過本地緩存通訊
  • 服務(wù)提供者無狀態(tài)略吨,任意一臺宕掉后集币,不影響使用
  • 服務(wù)提供者全部宕掉后,服務(wù)消費者應(yīng)用將無法使用翠忠,并無限次重連等待服務(wù)提供者恢復(fù)

伸縮性

  • 注冊中心為對等集群鞠苟,可動態(tài)增加機器部署實例,所有客戶端將自動發(fā)現(xiàn)新的注冊中心
  • 服務(wù)提供者無狀態(tài)秽之,可動態(tài)增加機器部署實例当娱,注冊中心將推送新的服務(wù)提供者信息給消費者

升級性

當服務(wù)集群規(guī)模進一步擴大,帶動IT治理結(jié)構(gòu)進一步升級考榨,需要實現(xiàn)動態(tài)部署跨细,進行流動計算,現(xiàn)有分布式服務(wù)架構(gòu)不會帶來阻力河质。下圖是未來可能的一種架構(gòu):
[圖片上傳失敗...(image-58d692-1604481906145)]

節(jié)點 角色說明
Deployer 自動部署服務(wù)的本地代理
Repository 倉庫用于存儲服務(wù)應(yīng)用發(fā)布包
Scheduler 調(diào)度中心基于訪問壓力自動增減服務(wù)提供者
Admin 統(tǒng)一管理控制臺
Registry 服務(wù)注冊與發(fā)現(xiàn)的注冊中心
Monitor 統(tǒng)計服務(wù)的調(diào)用次數(shù)和調(diào)用時間的監(jiān)控中心

Dubbo優(yōu)劣勢

優(yōu)點

  • 透明化的遠程方法調(diào)用冀惭,像調(diào)用本地方法一樣調(diào)用遠程方法,只需簡單配置掀鹅,沒有任何API侵入散休;
  • 軟負載均衡及容錯機制,可在內(nèi)網(wǎng)替代nginx lvs等硬件負載均衡器乐尊;
  • 服務(wù)注冊中心自動注冊&配置管理戚丸,不需要寫死服務(wù)提供者地址,注冊中心基于接口名自動查詢提供者ip科吭;
  • 服務(wù)接口監(jiān)控與治理,Dubbo-admin與Dubbo-monitor提供了完善的服務(wù)接口管理與監(jiān)控功能,針對不同應(yīng)用的不同接口猴鲫,可以進行多版本对人、多協(xié)議、多注冊 中心管理拂共。

缺點

  • 只支持Java語言
  • Dubbo 只支持 RPC 調(diào)用牺弄。這使得服務(wù)提供方與調(diào)用方在代碼上產(chǎn)生了強依賴,服務(wù)提供方需要不斷將包含公共代碼的 Jar 包打包出來供消費方使用宜狐。一旦打包出現(xiàn)問題势告,就會導(dǎo)致服務(wù)調(diào)用出錯。
  • Registry 嚴重依賴第三方組件(ZooKeeper 或者 Redis)抚恒,當這些組件出現(xiàn)問題時咱台,服務(wù)調(diào)用很快就會中斷。(雖然消費者本地會有緩存服務(wù)列表)

入門demo

1. 服務(wù)端
首先把服務(wù)端接口寫好俭驮,簡單來說回溺,Dubbo就是給消費端提供接口的春贸。

package com.cmos.dubbo.provider.service;

/**
 * TODO
 *
 * @AUTHOR ZhaoChengcai
 * @DATE 2020/9/1
 */
public interface ProviderService {
    String sayHello(String name);
}

這個接口很簡單,只有一個sayHello方法遗遵。
接著萍恕,定義該接口的實現(xiàn)類。

package com.cmos.dubbo.provider.service.impl;

import com.cmos.dubbo.provider.service.ProviderService;

/**
 * TODO
 *
 * @AUTHOR ZhaoChengcai
 * @DATE 2020/9/1
 */
public class ProviderServiceImpl  implements ProviderService {
    public String sayHello(String name) {
        return name;
    }
}

這樣车要,我們的接口就寫好了允粤,接下來就考慮把服務(wù)暴露出去。
導(dǎo)入相應(yīng)的maven依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cmos</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.5</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.32.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>
    </dependencies>

</project>

這里我們的Dubbo使用版本2.6.6翼岁,另外类垫,使用zookeeper作為注冊中心。

截至目前登澜,dubbo需要的環(huán)境已經(jīng)ok了阔挠,接下來,我們考慮把上面定義的接口暴露出去脑蠕。

1.1 暴露接口(xml配置方法)

resource目錄下新建provider.xml文件购撼,如下圖

[圖片上傳失敗...(image-30227f-1604481906145)]

provider.xml內(nèi)容,

<?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.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 當前項目在整個分布式架構(gòu)里面的唯一名稱谴仙, 計算依賴關(guān)系的標簽 -->
    <dubbo:application name="provider" owner="cmos">
        <dubbo:parameter key="qos.enable" value="true" />
        <dubbo:parameter key="qos.accept.foreign.ip" value="false" />
        <dubbo:parameter key="qos.port" value="55555" />
    </dubbo:application>

    <dubbo:monitor protocol="registry" />

    <!-- dubbo這個服務(wù)所要暴露的服務(wù)地址  這里我們使用dubbo隨機分配的地址迂求,我們先測試點對點的直連方式 -->
<!--    <dubbo:registry address="N/A" />-->

    <!-- 這里演示服務(wù)所暴露的服務(wù)地址  zookeeper作為注冊中心 -->
    <dubbo:registry address="N/A"/>
    <!-- <dubbo:registry address="zookeeper://localhost:2181" check="false" /> -->



    <!-- 當前服務(wù)發(fā)布所依賴的協(xié)議:webservice, http, dubbo, Thrift, Hessain -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 服務(wù)發(fā)布的配置,需要暴露的服務(wù)接口 -->
    <dubbo:service
            interface="com.cmos.dubbo.provider.service.ProviderService"
            ref="providerService" />

    <!-- bean 定義-->
    <bean id="providerService"
          class="com.cmos.dubbo.provider.service.impl.ProviderServiceImpl" />

</beans>

上面的文件類似spring配置文件晃跺,況且dubbo底層就是spring揩局。
①節(jié)點:dubbo:application
就是整個項目在分布式架構(gòu)中的唯一名稱,可以在name屬性中配置掀虎,另外還可以配置owner字段凌盯,表示屬于誰。
下面的參數(shù)是可以不配置的烹玉,這里配置是因為出現(xiàn)了端口沖突驰怎,所以配置。
②節(jié)點:dubbo:monitor
監(jiān)控中心配置二打,用于配置連接監(jiān)控中心相關(guān)信息县忌,可以不配置,不是必須參數(shù)继效。
③節(jié)點:dubbo:registry
配置注冊中心的信息症杏,比如,這里我們可以配置zookeeper作為我們的注冊中心瑞信。address是注冊中心的地址厉颤,這里如果配置的是N/A表示由dubbo自動分配地址,或者說是一種直連的方式凡简,不通過注冊中心走芋。
④節(jié)點:dubbo:protocol
服務(wù)發(fā)布的時候绩郎,dubbo依賴什么協(xié)議,可以配置dubbo翁逞,webservice肋杖,thrift,Hessain挖函,http等状植。
⑤節(jié)點:dubbo:service
這個節(jié)點是重點,當我們服務(wù)發(fā)布的時候怨喘,就是通過這個配置將我們的服務(wù)發(fā)布出去津畸,interface是接口的包路徑,ref是配置的接口bean必怜。
最后肉拓,我們需要像配置spring接口一樣,配置接口的bean梳庆。

1.2 發(fā)布服務(wù)
到這一步暖途,關(guān)于服務(wù)端的配置就完成了,下面通過main方法把接口發(fā)布出去膏执。

package com.cmos.dubbo.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * TODO
 *
 * @AUTHOR ZhaoChengcai
 * @DATE 2020/9/1
 */
public class App {
    public static void main(String[] args) throws Exception{
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        context.start();
        System.in.read();
    }
}

發(fā)布接口很簡單驻售,因為dubbo底層就是依賴spring的,所以更米,我們只需要通過ClassPathXmlApplicationContext拿到我們配置好的xml欺栗,然后調(diào)用context.start()方法就啟動了,看到下面的截圖證明啟動成功征峦,并把服務(wù)發(fā)布出去了迟几。
[圖片上傳失敗...(image-2b7896-1604481906145)]

2 消費端
上面提到,我們服務(wù)端提供的服務(wù)是點對點的方式栏笆,也就是采用直連类腮,沒有用注冊中心,所以消費端的配置要稍微有點區(qū)別竖伯。

2.1 消費端環(huán)境配置
[圖片上傳失敗...(image-ee9c2d-1604481906145)]

<?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.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="consumer" owner="cmos" />

    <dubbo:registry address="N/A" />
    <!-- 注冊中心配置 -->
<!--    <dubbo:registry address="zookeeper://localhost:2181" check="false" />-->


    <!-- 生成一個遠程調(diào)用的調(diào)用代理    (這里是點對點的方式) -->
    <dubbo:reference
            id="providerService"
            interface="com.cmos.dubbo.provider.service.ProviderService"
            url="dubbo://192.168.91.109:20880/com.cmos.dubbo.provider.service.ProviderService"/>
<!--    <dubbo:reference-->
<!--            interface="com.cmos.dubbo.provider.service.ProviderService"-->
<!--            id="providerService" />-->

</beans>

分析:
1.發(fā)現(xiàn)這里的dubbo:application和dubbo:registry是一致的存哲。

  1. dubbo:reference:我們這里采用點對點的方式因宇,所以需要配置服務(wù)端暴露的URL.

2.2 消費端maven依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cmos</groupId>
    <artifactId>dubbo-consumer</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.5</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.32.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.cmos</groupId>
            <artifactId>dubbo-provider</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

這里配置基本和服務(wù)端一樣七婴,唯一的不同就是,把服務(wù)端服務(wù)mvn intall,并在消費端引入服務(wù)端的依賴察滑。

2.3 調(diào)用服務(wù)

package com.cmos.dubbo.consumer;

import com.cmos.dubbo.provider.service.ProviderService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * TODO
 *
 * @AUTHOR ZhaoChengcai
 * @DATE 2020/9/1
 */
public class AppConsumer {
    public static void main(String[] args)  throws Exception{
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
        ProviderService providerService = (ProviderService)context.getBean("providerService");
        String str = providerService.sayHello("xiaoming");
        System.out.println(str);
        System.in.read();
    }

}

啟動服務(wù)打厘,如下證明成功。
[圖片上傳失敗...(image-168c73-1604481906145)]

3. 加入zookeeper作為注冊中心的話贺辰,請參考上述服務(wù)端和消費端的注釋配置信息户盯。更改即可嵌施。


上面是通過xml配置方式進行了dubbo環(huán)境配置,官方還提供了api配置莽鸭、注解配置方式吗伤。
但是api配置方式不是官方推薦的,官方推薦xml配置方式硫眨,但是隨著微服務(wù)的普及足淆,注解方式越來越得到大家的推崇,我在 本地做demo的時候也實現(xiàn)了注解方式礁阁,具體代碼請參考:
dubbo入門實例demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巧号,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姥闭,更是在濱河造成了極大的恐慌丹鸿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚品,死亡現(xiàn)場離奇詭異靠欢,居然都是意外死亡,警方通過查閱死者的電腦和手機南片,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門掺涛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疼进,你說我怎么就攤上這事薪缆。” “怎么了伞广?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵拣帽,是天一觀的道長。 經(jīng)常有香客問我嚼锄,道長减拭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任区丑,我火速辦了婚禮拧粪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沧侥。我一直安慰自己可霎,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布宴杀。 她就那樣靜靜地躺著癣朗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旺罢。 梳的紋絲不亂的頭發(fā)上旷余,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天绢记,我揣著相機與錄音,去河邊找鬼正卧。 笑死蠢熄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的炉旷。 我是一名探鬼主播护赊,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砾跃!你這毒婦竟也來了骏啰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤抽高,失蹤者是張志新(化名)和其女友劉穎判耕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翘骂,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡壁熄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碳竟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片草丧。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莹桅,靈堂內(nèi)的尸體忽然破棺而出昌执,到底是詐尸還是另有隱情,我是刑警寧澤诈泼,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布懂拾,位于F島的核電站,受9級特大地震影響铐达,放射性物質(zhì)發(fā)生泄漏岖赋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一瓮孙、第九天 我趴在偏房一處隱蔽的房頂上張望唐断。 院中可真熱鬧,春花似錦杭抠、人聲如沸脸甘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斤程。三九已至角寸,卻和暖如春菩混,著一層夾襖步出監(jiān)牢的瞬間忿墅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工沮峡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疚脐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓邢疙,卻偏偏與公主長得像棍弄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疟游,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354