SpringBoot開發(fā)案例之整合Dubbo分布式服務(wù)

前言

在 SpringBoot 很火熱的時候柳琢,阿里巴巴的分布式框架 Dubbo 不知是處于什么考慮霜浴,在停更N年之后終于進(jìn)行維護(hù)了棍矛。在之前的微服務(wù)中务傲,使用的是當(dāng)當(dāng)維護(hù)的版本 Dubbox,整合方式也是使用的 xml 配置方式夯到。

改造前

之前在 SpringBoot 中使用 Dubbox是這樣的嚷缭。先簡單記錄下版本,Dubbox-2.8.4耍贾、zkclient-0.6阅爽、zookeeper-3.4.6。

項目中引入 spring-context-dubbo.xml 配置文件如下:

<?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

? ? ? ? ">

? ? <!-- 記錄監(jiān)控信息 -->

? ? <dubbo:monitor protocol="registry"/>

? ? <!-- 提供方應(yīng)用信息荐开,用于計算依賴關(guān)系 -->

? ? <dubbo:application name="spring-boot-pay" />

? ? <!-- 使用zookeeper注冊中心暴露服務(wù)地址 subscribe 默認(rèn):true 是否向此注冊中心訂閱服務(wù)付翁,如果設(shè)為false,將只注冊晃听,不訂閱 check 默認(rèn):true 注冊中心不存在時百侧,是否報錯? ? -->

? ? <dubbo:registry protocol="zookeeper" address="192.168.1.180:2181" check="false"/>

? ? <!--

? ? ? ? ? ? ? 生產(chǎn)者配置 生產(chǎn)者? 遠(yuǎn)程默認(rèn)調(diào)用3次 參數(shù) retries="2" async="true" 異步返回結(jié)果 默認(rèn)是同步 timeout="10000" 毫秒

? ? ? ? ? ? ? 用dubbo協(xié)議在20882端口暴露服務(wù)? 固定線程池 10 啟動時建立線程,不關(guān)閉能扒,一直持有? 負(fù)載均衡策略 輪詢

? ? -->

? ? <dubbo:provider? timeout="10000"? threads="10" threadpool="fixed" loadbalance="roundrobin"/>

? ? <!-- name="dubbo" 協(xié)議名稱? 為防止被大量連接撐掛佣渴,可在服務(wù)提供方限制大接收連接數(shù),以實現(xiàn)服務(wù)提供方自我保護(hù)初斑。 host 部署外網(wǎng)設(shè)置為內(nèi)網(wǎng)通信地址-->

? ? <dubbo:protocol name="dubbo" port="-1" dispatcher="all"? accepts="1000"? />

? ? <!-- 使用注解方式-->? ?

? ? <dubbo:annotation package="com.itstyle"/>

</beans>

啟動類引入以下注解:

@SpringBootApplication

@ImportResource({"classpath:spring-context-dubbo.xml"})

public class Application{

? ? private static final Logger logger = Logger.getLogger(Application.class);

? ? public static void main(String[] args) throws InterruptedException,

? ? ? ? ? ? IOException {

? ? ? ? logger.info("支付項目啟動 ");

? ? }

}

改造后

然而 SpringBoot 引入了新的概念 Spring Boot Starter辛润,它有效的降低了項目開發(fā)過程的復(fù)雜程度,對于簡化開發(fā)操作有著非常好的效果见秤。

starter的理念

starter 會把所有用到的依賴都給包含進(jìn)來砂竖,避免了開發(fā)者自己去引入依賴所帶來的麻煩。

需要注意的是不同的 starter 是為了解決不同的依賴鹃答,所以它們內(nèi)部的實現(xiàn)可能會有很大的差異乎澄,例如 jpa 的starter 和 Redis 的 starter 可能實現(xiàn)就不一樣,這是因為 starter 的本質(zhì)在于 synthesize测摔,這是一層在邏輯層面的抽象置济,也許這種理念有點類似于 Docker,因為它們都是在做一個“包裝”的操作避咆,如果你知道 Docker 是為了解決什么問題的舟肉,也許你可以用 Docker 和 starter 做一個類比。

starter的實現(xiàn)

雖然不同的starter實現(xiàn)起來各有差異查库,但是他們基本上都會使用到兩個相同的內(nèi)容:ConfigurationProperties和AutoConfiguration路媚。

因為Spring Boot堅信“約定大于配置”這一理念,所以我們使用ConfigurationProperties來保存我們的配置樊销,并且這些配置都可以有一個默認(rèn)值整慎,即在我們沒有主動覆寫原始配置的情況下脏款,默認(rèn)值就會生效,這在很多情況下是非常有用的裤园。

除此之外撤师,starter的ConfigurationProperties還使得所有的配置屬性被聚集到一個文件中(一般在resources目錄下的application.properties),這樣我們就告別了Spring項目中XML地獄拧揽。

starter的整體邏輯

強(qiáng)如Dubbo剃盾,當(dāng)然也會創(chuàng)建屬于自己的 starter 來迎合Spring Boot 的火熱。

這里我們使用Dubbo比較新的版本淤袜,pom.xml 引入以下:

<!-- dubbo 替換? dubbox-->

<dependency>

? ? <groupId>com.alibaba</groupId>

? ? <artifactId>dubbo</artifactId>

? ? <version>2.6.2</version>

</dependency>

<dependency>

? ? <groupId>com.alibaba.spring.boot</groupId>

? ? <artifactId>dubbo-spring-boot-starter</artifactId>

? ? <version>2.0.0</version>

</dependency>

<!-- curator-recipes 替換? zkclient-->

<dependency>

? ? <groupId>org.apache.curator</groupId>

? ? <artifactId>curator-recipes</artifactId>

? ? <version>4.0.1</version>

</dependency>

application.properties 配置:

## dubbo springboot 配置

spring.dubbo.application.id=springboot_pay

spring.dubbo.application.name=springboot_pay

spring.dubbo.registry.address=zookeeper://192.168.1.127:2181

spring.dubbo.provider.threads=10

spring.dubbo.provider.threadpool=fixed

spring.dubbo.provider.loadbalance=roundrobin

spring.dubbo.server=true

spring.dubbo.protocol.name=dubbo

啟動類加入以下注解:

@EnableDubboConfiguration

@SpringBootApplication

public class Application{

? ? private static final Logger logger = Logger.getLogger(Application.class);

? ? public static void main(String[] args) throws InterruptedException,

? ? ? ? ? ? IOException {

? ? ? ? logger.info("支付項目啟動 ");

? ? }

}

相關(guān)暴露接口實現(xiàn)配置:

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;

@Service

@Component

public class AliPayServiceImpl implements IAliPayService {

? ? ? //省略代碼

}

最后啟動服務(wù)痒谴,如果啟動成功并注冊到注冊中心,說明改造成功铡羡。

補充

Dubbo 2.6.1 是改變結(jié)構(gòu)后首次發(fā)布的版本积蔚,Dubbo 2.6.0 已合并當(dāng)當(dāng)網(wǎng)提供的 Dubbox 分支。

Dubbo的版本策略:兩個大版本并行發(fā)展烦周,2.5.x是穩(wěn)定版本尽爆,2.6.x是新功能實驗版本。2.6上實驗都穩(wěn)定了以后读慎,會遷移到2.5漱贱。

歡迎工作一到五年的Java工程師朋友們加入Java架構(gòu)開發(fā): 855835163

群內(nèi)提供免費的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)贪壳、高性能及分布式饱亿、Jvm性能調(diào)優(yōu)、Spring源碼闰靴,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構(gòu)資料)合理利用自己每一分每一秒的時間來學(xué)習(xí)提升自己钻注,不要再用"沒有時間“來掩飾自己思想上的懶惰蚂且!趁年輕,使勁拼幅恋,給未來的自己一個交代杏死!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捆交,隨后出現(xiàn)的幾起案子淑翼,更是在濱河造成了極大的恐慌,老刑警劉巖品追,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玄括,死亡現(xiàn)場離奇詭異,居然都是意外死亡肉瓦,警方通過查閱死者的電腦和手機(jī)遭京,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門胃惜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哪雕,你說我怎么就攤上這事船殉。” “怎么了斯嚎?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵利虫,是天一觀的道長。 經(jīng)常有香客問我堡僻,道長糠惫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任苦始,我火速辦了婚禮寞钥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陌选。我一直安慰自己理郑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布咨油。 她就那樣靜靜地躺著您炉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪役电。 梳的紋絲不亂的頭發(fā)上赚爵,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機(jī)與錄音法瑟,去河邊找鬼冀膝。 笑死,一個胖子當(dāng)著我的面吹牛霎挟,可吹牛的內(nèi)容都是我干的窝剖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼酥夭,長吁一口氣:“原來是場噩夢啊……” “哼赐纱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起熬北,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤疙描,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后讶隐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體起胰,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年整份,在試婚紗的時候發(fā)現(xiàn)自己被綠了待错。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片籽孙。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖火俄,靈堂內(nèi)的尸體忽然破棺而出犯建,到底是詐尸還是另有隱情,我是刑警寧澤瓜客,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布适瓦,位于F島的核電站,受9級特大地震影響谱仪,放射性物質(zhì)發(fā)生泄漏玻熙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一疯攒、第九天 我趴在偏房一處隱蔽的房頂上張望嗦随。 院中可真熱鬧,春花似錦敬尺、人聲如沸枚尼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽署恍。三九已至,卻和暖如春蜻直,著一層夾襖步出監(jiān)牢的瞬間盯质,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工概而, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留呼巷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓赎瑰,卻偏偏與公主長得像朵逝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乡范,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

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