前言
最近剛入職新公司,又剛好公司需要根據一個現有項目,做一個產品。組長讓我們每個人空的時候都去想一想架構怎麼設計,然後每人發表一下意見。作爲一個有經驗的新人,這個機會自然是要把握住的。
第一步瞭解現有的架構,拿到項目後,對着頁面熟悉了一下系統業務,然後開始擼代碼。瞭解到現有的架構 Springboot + mybatis + mysql + Dubbo ,還是比較傳統的,一些常用的限流,熔斷的系統保護,分佈式鎖,分佈式事務都沒有考慮到,居然連配置中心也沒有使用。當時我初步的架構想法是: Springboot + spring cloud + mybatisMP + Dubbo + mysql + nacos 。
初識
有了這個想法之後,我就開始上網查資料並自己動手搭了一個框架,其中遇到很多坑,後來看到一篇文章講的是spring cloud和Dubbo的完美結合,裏面提到了Spring Cloud Alibaba,按照裏面的步驟,很簡單的就把框架搭建好了。於是我便瘋狂的去查了一些關於Spring Cloud Alibaba資料,也一步步的實踐到項目中。跟一個老同事聊了一下自己的想法,他說公司其他產品組都是在用spring cloud,服務調用用的Feign,他建議我也這樣,不需要用dubbo。所以最終定下的架構是:Springboot + spring cloud + mybatisMP + mysql + nacos + Feign + Sentinel + redisson + seata.
在搭建整合的過程遇到很多坑,自己是一步步趟過來的。所以我就想寫一個系列文章記錄下這些過程,及具體的實踐過程,一方面自己做下覆盤,另一方面也讓有需要的小夥伴少踩一些坑。
簡介
Spring Cloud Alibaba 致力於提供微服務開發的一站式解決方案。此項目包含開發分佈式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕鬆使用這些組件來開發分佈式應用服務。
依託 Spring Cloud Alibaba,您只需要添加一些註解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分佈式應用系統。
參考文檔 請查看 WIKI 。
使用組件
Nacos:一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
Sentinel:把流量作爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分佈式事務解決方案。
RocketMQ:一款開源的分佈式消息系統,基於高可用分佈式集羣技術,提供低延時的、高可靠的消息發佈與訂閱服務。
Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
準備
搭建一個spring boot項目,我使用的是Idea工具,過程就略過了...
Idea工具安裝激活請移步:https://blog.csdn.net/HXNLYW/article/details/81235444
增加統一依賴管理
在 pom.xml 文件中的 <dependencyManagement>標籤下
添加如下配置。
<!--版本號統一管理--> <properties> <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version> <alibaba-cloud.version>2.1.1.RELEASE</alibaba-cloud.version> </properties> <!--依賴統一管理--> <dependencyManagement> <dependencies> <!--spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--alibaba cloud --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${alibaba-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
避坑:springcloud 版本 和 springboot 的版本需要對應,不然啓動會報錯。
The method's class, org.springframework.boot.actuate.health.CompositeHealthIndicator, is available from the following locations:
jar:file:/F:/MavenLib/org/springframework/boot/spring-boot-actuator/2.2.1.RELEASE/spring-boot-actuator-2.2.1.RELEASE.jar!/org/springframework/boot/actuate/health/CompositeHealthIndicator.class
It was loaded from the following location:
file:/F:/MavenLib/org/springframework/boot/spring-boot-actuator/2.2.1.RELEASE/spring-boot-actuator-2.2.1.RELEASE.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of org.springframework.boot.actuate.health.CompositeHealthIndicator
版本對應關係:
cloud Release Train | Boot Version |
---|---|
Hoxton |
2.2.x |
Greenwich |
2.1.x |
Finchley |
2.0.x |
Edgware |
1.5.x |
Dalston |
1.5.x |
最新對應關係可以查看官網:https://spring.io/projects/spring-cloud
這樣準備工作就好了,我們需要引用哪個組件,只需要在 <dependencies> 中怎加相應依賴,無需指定<version>。
後面系列會根據案例逐個介紹組件的使用,歡迎大家繼續關注。
下一篇:《Spring Cloud Alibaba實戰》系列-Nacos之註冊中心、配置中心
===============================================
代碼均已上傳至本人的開源項目