咱們接上回 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相關技術棧放在之後講解
SpringCloudAlibaba體系中第一個重要角色來了!:
從上表SpringCloudAlibaba工具鏈構成中,我們不難發現Nacos被多次提及
Nacos在整個SpringCloudAlibaba體系中擔當了多個重要角色,它既是註冊中心,又是設定中心,還是服務匯流排
這些概念不理解?沒關係,大家會在後續實際使用過程中逐漸加深認知——這是我個人很喜歡的一種風格,概念聽別人講再多,不如自己實際上手體驗一次,每個人自然形成自己獨有的認知
我們先移步至Nacos官網:https://nacos.io/zh-cn/index.html
前往Github下載最新的Release版本解壓即可,我們到bin目錄下執行命令
startup.cmd -m standalone -f naming
以單機模式啟動Nacos,而後存取 http://127.0.0.1:8848/nacos/ 將進入登入介面:
初始預設賬號nacos,密碼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又有什麼作用呢?答案你或許已經猜到了——供其他應用呼叫!
這其中的機制我們留個懸念,下一節再講
那麼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框架將走進我們的視野!敬請期待~