SpringCloudAlibaba(五):SpringCloudAlibaba+Dubbo實踐

SpringCloud與Dubbo兩個框架一直以來都被用來作為兩種框架進(jìn)行比較西剥,其實對于兩者之間進(jìn)行比較是不公平的渗磅。SpringCloud可以說是一套完整的解決方案而Dubbo其實只是一種RPC和服務(wù)治理的實現(xiàn)方案。

Dubbo一直以來在國內(nèi)有較多的使用殊校,雖然阿里中間有一段時間沒有進(jìn)行維護(hù)芦疏,但是受眾群體還是比較多的。同時在阿里不再維護(hù)的那段時期也由當(dāng)當(dāng)維護(hù)的DubboX推出矛洞。但是Dubbo的相關(guān)周邊組件也依然不是那么的完善洼哎。

SpringCloud與Dubbo的整合方案不是那么的完善,相對來說整合的都比較‘丑’沼本。Dubbo的注冊中心是Zookeeper而SpringCloud一開始是不支持Zookeeper作為注冊中心的噩峦。所以在大部分的公司架構(gòu)中都是二者之間取其一。

SpringCloudAlibaba的出現(xiàn)解決了這樣的問題抽兆,SpringCloudAlibaba與Dubbo都選用Nacos作為服務(wù)的注冊中心识补,并且可以類似于傳統(tǒng)項目的SpringCloud項目一樣使用Feign進(jìn)行消費(fèi)。今天就嘗試一下使用Dubbo連接Nacos注冊中心辫红。

開始之前

可能之前寫過Dubbo的同學(xué)比較了解凭涂,Dubbo的服務(wù)提供方基本需要支持兩個項目,apiprovider贴妻。
api負(fù)責(zé)定義服務(wù)所提供的相關(guān)接口切油,以供消費(fèi)方進(jìn)行依賴。 provider則提供相關(guān)接口的具體實現(xiàn)名惩。
例如:

image

以上的結(jié)構(gòu)是遵守了幾年的一個規(guī)范澎胡,提供的相關(guān)接口由api項目負(fù)責(zé)定義,provider負(fù)責(zé)進(jìn)行實現(xiàn)娩鹉,consumer則依賴相關(guān)api進(jìn)行服務(wù)的調(diào)用攻谁。下面進(jìn)行分步驟的實現(xiàn)。

api 定義服務(wù)接口

IHelloService.java

public interface IHelloService {

    String hello(String name);

}

privider構(gòu)建服務(wù)提供方

  • 第一步:構(gòu)建SpringBoot項目弯予,引入SpringCloudAlibaba Nacos Dubbo相關(guān)依賴戚宦。同時也需要引入剛才的api項目。
<dependencies>
    <dependency>
        <groupId>top.anydata.products.web</groupId>
        <artifactId>nacos-discovery-dubbo-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
    <!--com.alibaba.cloud為畢業(yè)版本,org.springfremework.cloud為孵化版本-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--必須包含,否則會報錯-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>
  • 第二步:實現(xiàn)api項目中定義的接口
    HelloServiceImpl.java
@Service
public class HelloServiceImpl implements IHelloService {

    @Override
    public String hello(String name) {
        return "Hello:"+name;
    }

}

WARN: 這里的@Service注解不是springframework的而是org.apache.dubbo.config.annotation.Service注解

  • 第三步:配置文件
server:
  port: 8080
spring:
  application:
    name: nacos-dubbo-provider
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        enabled: true
        register-enabled: true
        server-addr: localhost:8848
  profiles:
    active: true
dubbo:
  scan:
    base-packages: top.anydata.products.web.example.nacos_discovery_dubbo_provider.service
  protocol:
    name: dubbo
    port: -1
  registry:
    address: spring-cloud://localhost
  application:
    qos-enable: true
  cloud:
    subscribed-services: /

配置nacos注冊中心相關(guān)熙涤,同時增加dubbo相關(guān)的配置信息阁苞。其中 scan 表示要掃描的dubbo基礎(chǔ)包。

  • 創(chuàng)建SpringBootApplication啟動類與啟動驗證
    NacosDubboProviderApplication.java
@SpringBootApplication
@EnableDiscoveryClient
public class NacosDubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDubboProviderApplication.class,args);
    }

}

啟動

image

啟動成功后在Nacos服務(wù)列表中即可看到入上服務(wù)祠挫。

consumer服務(wù)消費(fèi)方

第一步:構(gòu)建服務(wù)消費(fèi)調(diào)用項目那槽,pom.xml 所需的依賴與 provider一致。

第二步:創(chuàng)建Controller進(jìn)行服務(wù)消費(fèi)

HelloController.java

@RestController
public class HelloController {

    @Reference
    IHelloService helloService;

    @RequestMapping(value = "hello")
    public String hello(String name){
        return helloService.hello(name);
    }

}

WARN: @Reference 是org.apache.dubbo.config.annotation.Reference 有較多的參數(shù)配置可選,例如check=true校驗服務(wù)是否健康等

第三步:Dubbo相關(guān)配置

server:
  port: 8081
  application:
    name: nacos-dubbo-consumer
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        enabled: true
        register-enabled: true
        server-addr: localhost:8848
spring:
  application:
    name: nacos-dubbo-consumer
dubbo:
  registry:
    address: spring-cloud://localhost
  cloud:
    subscribed-services: nacos-dubbo-provider
  application:
    qos-enable: false

WARN:此處 dubbo.cloud.subscribed-services為調(diào)用的服務(wù),配置為服務(wù)的注冊名稱等舔∩Ь模可以在Nacos中查看

第四步:創(chuàng)建NacosDubboConsumerApplication類并啟動消費(fèi)

NacosDubboConsumerApplication.java

@SpringBootApplication
@EnableDiscoveryClient
public class NacosDubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDubboConsumerApplication.class,args);
    }

}

啟動成功后仍然使用postman進(jìn)行測試。

image

結(jié)論

通過以上的測試慌植,可以看到SpringCloud與Dubbo使用Nacos注冊中心來實現(xiàn)還是非常簡單的甚牲,Dubbo 的RPC性能優(yōu)勢還是非常重要的义郑。同時仍可以享受SpringCloud的各種便利。SpringCloudAlibaba提供的整合方案能夠融合SpringCloud與Dubbo的各種優(yōu)勢丈钙,同時也便于原有SpringCloud與Dubbo用戶的遷移非驮。

本篇源碼示例:

https://github.com/CainGao/SpringCloudAlibabaExample  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雏赦,隨后出現(xiàn)的幾起案子劫笙,更是在濱河造成了極大的恐慌,老刑警劉巖星岗,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件填大,死亡現(xiàn)場離奇詭異,居然都是意外死亡俏橘,警方通過查閱死者的電腦和手機(jī)允华,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寥掐,“玉大人靴寂,你說我怎么就攤上這事〔苷蹋” “怎么了榨汤?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怎茫。 經(jīng)常有香客問我,道長妓灌,這世上最難降的妖魔是什么轨蛤? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮虫埂,結(jié)果婚禮上祥山,老公的妹妹穿的比我還像新娘。我一直安慰自己掉伏,他們只是感情好缝呕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斧散,像睡著了一般供常。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸡捐,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天栈暇,我揣著相機(jī)與錄音,去河邊找鬼箍镜。 笑死源祈,一個胖子當(dāng)著我的面吹牛煎源,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播香缺,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼手销,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了图张?” 一聲冷哼從身側(cè)響起锋拖,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埂淮,沒想到半個月后姑隅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倔撞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年讲仰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痪蝇。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡鄙陡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躏啰,到底是詐尸還是另有隱情趁矾,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布给僵,位于F島的核電站毫捣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏帝际。R本人自食惡果不足惜蔓同,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹲诀。 院中可真熱鬧斑粱,春花似錦、人聲如沸脯爪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痕慢。三九已至尚揣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間守屉,已是汗流浹背惑艇。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滨巴。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓思灌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恭取。 傳聞我的和親對象是個殘疾皇子泰偿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355