2019-12-15 Spring Cloud微服務從入門到入土(1)項目搭建與公共API模塊

項目地址:https://gitee.com/QNKCDZ0/WenDev-Microservice

為什么要做微服務?

最初的目的其實很簡單——好奇懊⑽小!整天聽說微服務有多么多么厲害卖漫,在大型項目上的表現有多么多么好费尽。本著“既然好奇那就一定要自己試一試”的心態(tài),開搞了羊始。

為什么使用Spring Cloud旱幼?

目前在Java微服務領域,比較成熟的全套解決方案非Spring Cloud莫屬了突委。既然初學柏卤,還是從比較簡單的開始。

為什么使用Spring Cloud Alibaba?

之前匀油,Spring Cloud的主流解決方案基本都是使用Netflix的那一套缘缚,但是Eureka閉源、Hystrix停止更新敌蚜,以及Zuul 1.x性能不是很好讓我覺得只用Netflix那一套肯定是不行的桥滨。正好,阿里也為Spring Cloud提供了一套完整的解決方案弛车,所以就選擇了Spring Cloud Alibaba齐媒。

正式開始!

Spring Cloud我選擇了最新的Hoxton版本(或者應該叫H版纷跛?)喻括。

創(chuàng)建一個父工程wendev-parent,用于整個項目的依賴管理和模塊管理忽舟。

創(chuàng)建pom.xml双妨。以后需要什么依賴淮阐,就可以添加到這個文件中,然后在模塊里引用:

<?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>site.wendev.microservice</groupId>
    <artifactId>wendev-microservice</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.12</junit.version>
        <nacos.version>0.2.2.RELEASE</nacos.version>
        <zipkin.version>2.10.1</zipkin.version>
        <dubbo.version>2.7.4.1</dubbo.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Cloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Spring Cloud Alibaba -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.9.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Dubbo -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-serialization-kryo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <!-- Spring Context Support -->
            <dependency>
                <groupId>com.alibaba.spring</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>1.0.5</version>
            </dependency>

            <!-- JUnit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>

            <!-- Nacos -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>${nacos.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${nacos.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.cloud</groupId>
                        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- MySQL and JPA -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.17</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>

            <!-- zipkin -->
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin</artifactId>
                <version>${zipkin.version}</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-server</artifactId>
                <version>${zipkin.version}</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-autoconfigure-ui</artifactId>
                <version>${zipkin.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

然而在后面的開發(fā)中經常會遇到不知道少了哪個依賴而啟動不起來的狀況刁品。雳攘。鸟辅。這個會在后續(xù)文章中慢慢總結。

公共API模塊

因為使用Dubbo作為RPC框架,所以必須要有一個公共的API模塊脖捻。此外,這個模塊還可以用來存放一些公共資源退唠,比如實體類等≡崃牵現在就來建立這個模塊。

wendev-parent下新建一個Maven module拌汇,名為wendev-api柒桑。

創(chuàng)建pom.xml

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

    <parent>
        <groupId>site.wendev.microservice</groupId>
        <artifactId>wendev-microservice</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>wendev-api</artifactId>

    <dependencies>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

在這個module中單獨引入lombok主要是為了方便以后創(chuàng)建實體類時使用。

因為目前我們什么服務都沒有噪舀,所以這個公共API模塊暫時還是空的魁淳。在后續(xù)開發(fā)中向這個模塊中添加了一些API后,需要執(zhí)行mvn install將它安裝与倡,以便其他模塊進行引用(否則啟動的時候可能會報找不到包的錯誤界逛,但也有可能不報,所以最好還是mvn install一下)纺座。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末息拜,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子净响,更是在濱河造成了極大的恐慌少欺,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件别惦,死亡現場離奇詭異狈茉,居然都是意外死亡,警方通過查閱死者的電腦和手機掸掸,發(fā)現死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門氯庆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扰付,你說我怎么就攤上這事堤撵。” “怎么了羽莺?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵实昨,是天一觀的道長。 經常有香客問我盐固,道長荒给,這世上最難降的妖魔是什么丈挟? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮志电,結果婚禮上曙咽,老公的妹妹穿的比我還像新娘。我一直安慰自己挑辆,他們只是感情好例朱,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鱼蝉,像睡著了一般洒嗤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魁亦,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天渔隶,我揣著相機與錄音,去河邊找鬼洁奈。 笑死派撕,一個胖子當著我的面吹牛,可吹牛的內容都是我干的睬魂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼镀赌,長吁一口氣:“原來是場噩夢啊……” “哼氯哮!你這毒婦竟也來了?” 一聲冷哼從身側響起商佛,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喉钢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后良姆,有當地人在樹林里發(fā)現了一具尸體肠虽,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年玛追,在試婚紗的時候發(fā)現自己被綠了税课。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡痊剖,死狀恐怖韩玩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情陆馁,我是刑警寧澤找颓,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站叮贩,受9級特大地震影響击狮,放射性物質發(fā)生泄漏佛析。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一彪蓬、第九天 我趴在偏房一處隱蔽的房頂上張望寸莫。 院中可真熱鬧,春花似錦寞焙、人聲如沸储狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辽狈。三九已至,卻和暖如春呛牲,著一層夾襖步出監(jiān)牢的瞬間刮萌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工娘扩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留着茸,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓琐旁,卻偏偏與公主長得像涮阔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灰殴,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • 前言 現在研發(fā)的項目啟動今已近一年之久敬特,期間從項目屬性、人員規(guī)模牺陶、系統(tǒng)定位等方面都發(fā)生了很大的變化伟阔,而且是越變越好...
    孫振強閱讀 12,286評論 1 58
  • 微服務架構模式的核心在于如何識別服務的邊界,設計出合理的微服務掰伸。但如果要將微服務架構運用到生產項目上皱炉,并且能夠發(fā)揮...
    java菜閱讀 2,944評論 0 6
  • 桃花 黃嵐/文攝 滄海若杯春露少, 良儔念舊惹相思狮鸭。 桃花獨與東風約合搅, 一旦重逢綻滿枝。 白玉蘭 黃嵐/文攝 怒放...
    雪嵐夢語閱讀 938評論 0 1
  • 一 A把今天高數課上布置的作業(yè)全部完成,整理好學生會下半個月要做的策劃廊谓,然后收拾書包離開圖書館梳猪。今晚的有些涼,A穿...
    酒吾閱讀 427評論 0 0
  • 年少的時候,姥姥住在我家春弥,我奇怪的問母親呛哟,怎么姥姥在咱家呢?不在舅舅家呢匿沛,母親說:她是兄妹幾個最小的扫责,再加上母親年...
    惠雪閱讀 246評論 0 3