2流高手速成記(之六):從SpringBoot到SpringCloudAlibaba

咱們接上回 2流高手速成記(之五):Springboot整合Shiro實現安全管理 – 14號程式設計師 – 部落格園 (cnblogs.com)

身邊常有朋友說:小項目用PHP、大項目用Java(這裡絕無貶低PHP技術棧之意),曾經有興趣對比過兩種語言的技術棧

PHP有TP、Laravel這樣成熟的企業級框架,Laravel更是秉持匠人精神,利用PHP諸多全新的特性,打造出了現代化的PHP全棧框架

Java則憑藉SpringBoot諸多的便捷特性,以及idea這種超智慧化ide的加持,相比於傳統的JavaEE開發直接拔高了幾個位次

二者在Web企業級應用開發領域各自佔據了一席之地,設計思想層面也存在諸多的相似之處,如果非要找尋二者決定性的差異,我認為答案就在於——SpringCloud的存在!

從SpringBoot到SpringCloud/SpringCloudAlibaba,從單節點到多節點/微服務,完成這樣一次蛻變,是我所期待已久的!

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、消息匯流排、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud並沒有重複製造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分散式系統開發工具包。——來自百度百科

有人問SpringCloud到底是什麼?我們從百科對於SpringCloud的解讀不難看出幾個關鍵資訊:

1. SpringCloud是一系列框架的有序集合

2. SpringCloud與SpringBoot無縫集成,使用流程大幅簡化,可基於SpringBoot實現一鍵部署

3. SpringCloud主要用於微服務及分散式開發,包含服務發現、配置中心、負載均衡等諸多內容

OK,現在SpringCloud是什麼清楚了,那我在標題中提到的SpringCloudAlibaba又是什麼?

一句話概括——SpringCloudAlibaba是SpringCloud原基礎上的擴展

SpringCloudAlibaba來自中國大名鼎鼎的阿里巴巴技術團隊,他們重新提取微服務框架設計理念的精髓,在原SpringCloud基礎之上派生出了新的技術棧

SpringCloudAlibaba既基於SpringCloud的設計理念,二者又在工具鏈層面彼此獨立,我們來看他們的區別

名稱 SpringCloud SpirngCloudAlibaba
註冊中心 Eureka、Consul Nacos
配置中心 SpringCloud Config Nacos
網關 SpringCloud Zull SpringCloud Gateway
負載均衡 Ribbon Loadbalabcer
熔斷降級 Hystrix Sentinel
服務調用 Feign OpenFeign
服務匯流排 Bus Nacos
消息中間件 無(第三方替代方案:rabbitmq) RecketMQ
分散式解決方案 無(第三方替代方案:2pc) Seata

從本節開始,我們會基於SpringCloudAlibaba做一系列講解,原生SpringCloud相關技術棧放在之後講解

1. Nacos

SpringCloudAlibaba體系中第一個重要角色來了!:

從上表SpringCloudAlibaba工具鏈構成中,我們不難發現Nacos被多次提及

Nacos在整個SpringCloudAlibaba體系中擔當了多個重要角色,它既是註冊中心,又是配置中心,還是服務匯流排

這些概念不理解?沒關係,大家會在後續實際使用過程中逐漸加深認知——這是我個人很喜歡的一種風格,概念聽別人講再多,不如自己實際上手體驗一次,每個人自然形成自己獨有的認知

我們先移步至Nacos官網://nacos.io/zh-cn/index.html

前往Github下載最新的Release版本解壓即可,我們到bin目錄下執行命令

startup.cmd -m standalone -f naming

以單機模式啟動Nacos,而後訪問 //127.0.0.1:8848/nacos/ 將進入登錄介面:

 

 

 初始默認帳號nacos,密碼nacos,登錄後看到主介面

 

 

 大家可以看到,最開始這裡是沒有內容的

2. Nacos作為註冊中心

新建一個SpringCloudAlibaba工程

 

我們依然延續第一節(2流高手速成記(之一):初識SpringBoot及基礎項目構建 – 14號程式設計師 – 部落格園 (cnblogs.com))中這種構建工程的方式

 

區別在於這次我們要重點勾選SpringCloud及SpringCloudAlibaba相關依賴項

 

之後我們將獲得一個與之前SpringBoot模板略有不同的工程目錄結構

 

我們看到工程的resources目錄下額外多出了一個bootstrap.properties文件,兩個Nacos相關的Configuration配置文件暫時用不到

pom.xml中也多出了相應的版本聲明及依賴項:

    <properties>
        ......
        <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    </properties>

......

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
        </dependency>

我們先修改下bootstrap.properties和application.properties中指向的nacos服務地址:(注意:兩個配置文件下的配置都要修改)

# 設置配置中心服務端地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

而後直接啟動工程,待工程啟動完畢後,刷新nacos主介面

 

我們將看到我們的應用已經成功【註冊】到Nacos服務中心

到這裡你是否有種恍然大悟的感覺?這就是Nacos所擔當的「註冊中心」的角色!

那麼我們將應用作為一個服務註冊到Nacos又有什麼作用呢?答案你或許已經猜到了——供其他應用調用!

這其中的機制我們留個懸念,下一節再講

3. Nacos作為配置中心

那麼nacos又是如何充當配置中心的作用?

還記得剛才多出來的那個bootstrap.properties嗎?現在我們可以來聊聊它的作用了

bootstrap.properties的載入時機要優先於application.properties,一般用於指定系統級的相關配置,其配置內容一般固定不變

藉助於bootstrap.properties,我們可以實現application.properties配置內容的「雲端化」

我們先來看bootstrap.properties的內容:

# Nacos認證資訊
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 設置配置中心服務端地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=

# 應用名稱
spring.application.name=hellospringcloudalibaba

可以看到它主要包含了Nacos相關的配置資訊

最後應用名稱這部分是我後續補充的

之後我們便可以移除本地的application.properties,並將其內容遷移至Nacos

打開Nacos配置管理頁面,新增配置

 

 

我們重新啟動工程,發現在本地不存在application.properties配置的情況下,工程依然可以重新啟動,並正確載入遷移到Nacos的工程配置

這就是Nacos作為「配置中心」的作用!而這種雲端化配置的方式顯然要比application.properties本土化配置的方式更加靈活便捷

 

這就是Nacos在SpringCloudAlibaba體系之下所起到的核心作用,這裡其實也僅是點到為止,但相信你已經對這些概念有了一個大概的了解

以上

 

本節先是引出了微服務的概念,繼而闡述了SpringCloud以及SpringCloudAlibaba的區別,最後具體講解了Nacos作為SpringCloudAlibaba體系的核心組件所起到的作用

微服務領域的學問博大精深,本節僅是引出了概念而並未做深入討論;下一節我們將繼續挖掘SpringCloudAlibaba微服務更多的機制和用法

Dubbo框架將走進我們的視野!敬請期待~