騷話環節
一入程式設計深似海,從此節操是路人。脫發已是常态,緻富還需絕頂。
那天我聽說程式員之間還互相鄙視,其中不能忍的終極鄙視:有女朋友的程式員鄙視沒有女朋友的程式員。這不能忍,打不過怎麼辦,問就是加入吧。
由于是測試環境,使用版本比較新,學當然要學新知識吸收精華,羽化成仙,做那萬人敬仰韓天尊。啊,不好意思,扯遠了。開個玩笑,我們依舊使用穩定版本。此次在Linux發行版作業系統中全程使用root使用者進行測試避免權限問題帶來的幹擾,如果使用普通使用者請自行測試提權賦予所有者或者所屬組權限。
騷話不多說,直接進入今天的主題springboot項目內建微服務元件nacos。
springboot與微服務元件nacos
必備環境,前置條件盡量保持一緻:
- JDK版本: JDK17
- 開發工具和項目建構工具:STS4 & Maven3.6
- Springboot版本:Springboot2.7.x
- 服務監控三件套:Nacos2.x、Prometheus2.3.x、Grafana9.3.x
- 開發測試環境:Linux(centos-stream-9)雲伺服器或者VMware搭建環境
你可以了解到的知識:從項目開發建構到線上測試釋出,不過,需要具備一點點Java或者其它程式設計語言基礎知識。
tips:做實驗時請檢查是否關安裝防火牆管理工具,關閉防火牆服務或者開啟相應端口,或者放通雲伺服器安全組。
企業中生産環境,唯穩,穩中求快。
可以看到,我再次使用了這張流程圖,在第三篇會總結使用過程。
Nacos服務快速啟動
關于nacos2.2.0相關配置說明以及資料源說明,遇到問題總結,可以參考如下文章:
https://blog.cnwangk.top/2023/03/30/MySQL資料庫與Nacos搭建監控服務/
使用hexo搭建靜态部落格網站,感興趣可以自己搭建一個,利用github pages和cloudflare pages等進行同步。之是以給出上面的連結,因為一篇優質的教程,會持續更新疊代。當然,在個人公衆号裡面同樣可以搜尋到相關教程。
根據個人或者團隊開發環境,可以選擇架構開發環境:spring、springboot以及springcloud內建nacos。
值得注意的地方
伺服器部署nacos服務支援多種場景:
- Nacos原生形式部署。
- Nacos Docker形式部署。
- Nacos Kubernetes形式部署。
至于用哪種方式,根據實際業務場景分析,選擇符合個人或者公司業務場景的最佳方式。
Nacos支援三種部署模式
- 單機模式:用于測試和單機試用。
- 叢集模式:用于生産環境,確定高可用。
- 多叢集模式:用于多資料中心場景。
高可用環境準備
- 建議支撐環境:部署JDK,需要1.8及其以上版本
- 建議硬體配置:2核 CPU / 4G 記憶體 及其以上
- 建議軟體配置:生産環境3個節點及其以上
Nacos 依賴 Java 環境來運作。如果您是從代碼開始建構并運作Nacos,還需要為此配置 Maven環境,請確定是在以下版本環境中安裝使用:
1、預備環境準備
- 64 bit OS,支援 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。
- 64 bit JDK 1.8+。
- Maven 3.2.x+。
2、下載下傳源碼或者安裝包
你可以通過源碼和發行包兩種方式來擷取 Nacos。
個人推薦:下載下傳發行包。關于版本,使用穩定版本(通常有GA辨別),個人習慣使用官方推薦的上一個小版本。有特殊需求可以下載下傳源碼包,修改源碼重新編譯。
從 Github 擷取源碼方式,使用git clone指令,值得注意的是你需要部署Git環境:
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
nacos發行包下載下傳位址:
- https://github.com/alibaba/nacos/releases
- https://github.com/alibaba/nacos/releases/tag/2.1.1
下載下傳編譯後壓縮包方式,您可以從 最新穩定版本 下載下傳 nacos-server-$version.zip 包。
unzip nacos-server-$version.zip 或者 tar -zxvf nacos-server-$version.tar.gz
cd nacos/bin
- $version指具體nacos版本号,比如具體版本:nacos-server-2.1.1。
- Windows平台建議下載下傳以 .zip結尾的壓縮包:nacos-server-2.1.1.zip。
- Linux平台建議下載下傳以 .tar.gz 結尾的壓縮包:nacos-server-2.1.1.tar.gz。
3、修改配置檔案
注意:修改conf目錄下的application.properties檔案。設定其中的nacos.core.auth.plugin.nacos.token.secret.key值,詳情可檢視鑒權-自定義密鑰:
https://nacos.io/zh-cn/docs/v2/plugin/auth-plugin.html
注意,文檔中的預設值SecretKey012345678901234567890123456789012345678901234567890123456789和VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=為公開預設值,可用于臨時測試,實際使用時請務必更換為自定義的其他有效值。
4、啟動伺服器
Linux/Unix/Mac:執行startup.sh腳本
啟動指令(standalone代表着單機模式運作,非叢集模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系統,或者運作腳本報錯提示[[符号找不到,可嘗試如下運作:
bash startup.sh -m standalone
Windows平台:執行startup.cmd腳本
啟動指令(standalone代表着單機模式運作,非叢集模式):
startup.cmd -m standalone
5、關閉伺服器
Linux/Unix/Mac:執行shutdown.sh腳本
sh shutdown.sh
Windows平台:執行shutdown.cmd腳本
shutdown.cmd
可以在Windows中使用terminal或者cmd指令行運作shutdown.cmd指令,也可以輕按兩下shutdown.cmd運作檔案。
以下為個人實戰總結,僅供參考
個人開發以及測試環境:
- Spring Tool Suite4
- JDK17
- Maven3.6
- Springboot2.7.6
- VMware16 & Linux(Centos-9-Stream)
關于IDE的選擇:
有人喜歡使用 IntelliJ IDEA ,有人喜歡用 Vim,有人喜歡用VSCode,還有人就偏愛 eclipse 。開發工具 IDE 的選擇,不一定非要和我保持一緻。個人開發者可以根據自己的喜好選擇,怎麼順手怎麼來,主打一個用的舒心。如果是團隊開發,最優質的方案是與團隊保持一緻。
可能是入坑最開始接觸的 IDE 是eclipse,習慣了。個人小項目偶爾會用VSCode,大型項目更趨向于 eclipse 或者 IntelliJ IDEA。
STS4 開發工具
支援OS版本,彼時最新版本是4.17.1
- Linux X86_64、Linux ARM_64
- MACOS X86_64、MACOS ARM_64
- WINDOWS X86_64
官網:https://spring.io/tools
下載下傳位址:https://download.springsource.com/release/STS4/4.16.1.RELEASE/dist/e4.25/spring-tool-suite-4-4.16.1.RELEASE-e4.25.0-win32.win32.x86_64.self-extracting.jar
Maven 環境配置
STS4開發工具引入Maven配置
依次找到頂部菜單欄:Window---> Preferences---> Maven--->User Settings--->Global Settings & User Settings--->Apply
配置完記得點選Apply或者Apply and Close
Maven Repo配置阿裡雲鏡像源
本地maven環境配置conf\settings.xml(使用阿裡雲鏡像位址),maven版本:apache-maven-3.6.3
配置本地repo倉庫存儲目錄
<localRepository>D:\Maven\repo</localRepository>
配置mirrors
<mirrors>
<mirror>
<id>aliyunmaven</id>
<name>aliyun maven</name>
<!-- 老版本url -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<!-- 新版本url -->
<!--<url>https://maven.aliyun.com/repository/public/</url>-->
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
阿裡雲Maven中央倉庫為 阿裡雲雲效 提供的公共代理倉庫,幫助研發人員提高研發生産效率,使用阿裡雲Maven中央倉庫作為下載下傳源,速度更快更穩定。
倉庫名稱 | 阿裡雲倉庫位址 | 阿裡雲倉庫位址(老版) | 源位址 |
central | https://maven.aliyun.com/repository/central | https://maven.aliyun.com/nexus/content/repositories/central | https://repo1.maven.org/maven2/ |
jcenter | https://maven.aliyun.com/repository/public | https://maven.aliyun.com/nexus/content/repositories/jcenter | http://jcenter.bintray.com/ |
public | https://maven.aliyun.com/repository/public | https://maven.aliyun.com/nexus/content/groups/public | central倉和jcenter倉的聚合倉 |
https://maven.aliyun.com/repository/google | https://maven.aliyun.com/nexus/content/repositories/google | https://maven.google.com/ | |
gradle-plugin | https://maven.aliyun.com/repository/gradle-plugin | https://maven.aliyun.com/nexus/content/repositories/gradle-plugin | https://plugins.gradle.org/m2/ |
spring | https://maven.aliyun.com/repository/spring | https://maven.aliyun.com/nexus/content/repositories/spring | http://repo.spring.io/libs-milestone/ |
spring-plugin | https://maven.aliyun.com/repository/spring-plugin | https://maven.aliyun.com/nexus/content/repositories/spring-plugin | http://repo.spring.io/plugins-release/ |
grails-core | https://maven.aliyun.com/repository/grails-core | https://maven.aliyun.com/nexus/content/repositories/grails-core | https://repo.grails.org/grails/core |
apache snapshots | https://maven.aliyun.com/repository/apache-snapshots | https://maven.aliyun.com/nexus/content/repositories/apache-snapshots | https://repository.apache.org/snapshots/ |
線上搜尋jar包依賴:https://developer.aliyun.com/mvn/search
Springboot內建nacos服務
主要介紹Springboot項目以微服務形式內建nacos,如果使用springmvc或者是普通springboot項目內建nacos服務,可以參考官方文檔。關于版本問題,我将官方部分(個人感覺初次使用可能用得上,并非全部)文檔引入到本次教程。
tips:sts個性化注解設定,Window---> Preferences--->Java--->Code Style--->Code Templates--->Comments:Types method
在內建nacos服務之前,一步一步來,從建構第一個springboot項目開始。
springboot項目建構
可能你有疑問,springboot版本如何選擇,下圖支援最後維護時間可供參考:
目前Springboot官網最新穩定版本是Springboot3.0.5,實際工作中個人使用2.7.x版本,未來主流可能是3.X版本。目前主流依舊是Springboot2.x,更傾向于2.6.x或者2.7.x作為開發建構版本,當然也是以spring官網顯示維護時間作為參考。
項目建構方式有多種,總體上分官網腳手架建構和開發工具建構,此處以官網和STS4為示例。不必糾結,怎麼順手怎麼來。
- 官網建構:https://start.spring.io/
- STS4開發工具建構
- VSCode 開發工具建構
- IntelliJ IDEA工具建構
如果官網通路速度緩慢,你還可以通過阿裡雲腳手架網站建構:https://start.aliyun.com/
springboot項目之官網建構
通路:https://start.spring.io/
第一步
- Project:選擇Maven作為項目建構方式
- Language:選擇Java作為開發語言
- Spring Boot:選擇springboot2.7.6穩定版本作為建構版本
- Dependencies:選擇pom依賴的jar包
第二步
- Project Metadata:項目中繼資料,Group組名、Artifact工程名、Name項目名稱、Description項目描述、Package name包名。
- Packaging:選擇Jar作為預設打包方式。
- Java:選擇JDK17作為Java項目預設建構版本。
- GENERATE:生成建構項目demo并下載下傳。
- EXPLORE:展示出建構項目結構清單以及檔案具體内容。
以下展示Project Metadata截圖以及EXPLORE截圖。
EXPLORE:展示項目層次結構
springboot項目之STS4工具建構
依次選擇File-->new-->Spring Starter Project,或者使用快捷鍵ALT+SHIFT+N。
配置Project步驟一
具體含義參考上面官網建構時說明。
配置Project步驟二
選擇springboot版本,以及配置所需要的pom.xml依賴。
如下圖所示,Spring Boot Version個人選擇的是springboot2.7.6穩定版本作為示範,目前最新穩定版本可選為springboot3.0.5。Frequently Used表示官方建議使用到的一些工具,講幾個個人使用過的。
Lombok用于簡化實體類(bean、entity、repository)get、set方法以及log日志列印,個人開發很實用,團隊中慎重使用。
MariaDB Driver是MariaDB資料庫驅動,可以看做是MySQL替代産品。Spring Data JPA是對ORM持久化架構Hibernate近一步封裝,簡化了SQL操作。Spring Data MongoDB是nosql資料庫中的一種,其它有Redis,主要用于做緩存使用。Spring Data Redis是nosql資料庫中的一種,前面剛好介紹到了。
搜尋框Type to search dependencies,可以進行檢索需要的依賴,也可以展開下面小箭頭選擇依賴。比如展開下圖上的SQL選項,有多種資料庫驅動依賴可供選擇使用。
springboot內建微服務nacos
正式搭建之前,注意項目環境:使用Spring如何內建nacos?使用springboot如何內建nacos?使用springcloud微服務元件如何內建nacos?此處發出了三連問,也許你在使用時也會遇到。不同的環境,可能得到的結果不一樣。
**下面将示範 springboot 項目內建微服務元件 nacos 過程 **。
1、啟動示例
本地正常啟動場景,使用127.0.0.1或者localhost,預設端口:8080。特殊情況在配置檔案指定了固定IP位址。例如在application.properties 或者 application.yml 指定IP和端口,兩種配置方式保留一種即可。
示例:application.properties
server.port=8081
server.address=192.168.1.111
示例:application.yml
server:
port: 8081
address: 192.168.1.111
springboot啟動過程:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.6)
2022-10-26 20:13:06.902 INFO 16620 --- [ main] com.test.demo.Application : Starting Application using Java 17.0.2 on kart with PID 16620 (...)
2022-10-26 20:13:08.091 INFO 16620 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
...
2022-10-26 20:13:10.260 INFO 16620 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP springboot-test 192.168.245.1:8080 register finished
2022-10-26 20:13:10.579 INFO 16620 --- [ main] com.test.demo.Application : Started Application in 4.45 seconds (JVM running for 5.251)
2、配置pom.xml
springbot版本簡要說明:springboot GA(General Availability 表示穩定版本),各分支最新穩定版本2.3.12、2.4.13、2.5.14、2.6.14、2.7.10、3.0.5
<!-- springboot GA(最新穩定版本):2.3.12、2.4.13、2.5.14、2.6.14、2.7.10、3.0.5 -->
<!-- springboot pom.xml parent父類 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.6</version>
<relativePath/>
</parent>
統一版本管理:JDK版本:17,spring-cloud-dependencies版本采用2021.0.4,spring-cloud-alibaba-dependencies版本采用:2021.0.4.0,和我保持一緻,可以采用springboot2.7.x進行測試使用。目前,如果使用阿裡雲腳手架建構,springboot版本推薦不高于2.6.13。在nacos系列博文第一篇《MySQL資料庫與Nacos搭建監控服務》中有寫到如何建構,這裡不在贅述。
<properties>
<java.version>17</java.version>
<spring-cloud-dependencies.version>2021.0.4</spring-cloud-dependencies.version>
<spring-cloud-alibaba-dependencies.version>2021.0.4.0</spring-cloud-alibaba-dependencies.version>
</properties>
pom依賴管理:dependency
主要注意版本對應:
- 微服務:spring cloud依賴
- 微服務:spring cloud alibaba依賴
- 微服務:nacos config依賴、nacos discovery依賴、bootstrap依賴
<!-- 總包管理 -->
<dependencyManagement>
<dependencies>
<!-- spring cloud依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud alibaba依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 引入相關依賴 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 微服務 nacos config依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 微服務 nacos discovery依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 微服務 bootstrap依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
3、配置application.properties & application.yml & bootstrap.properties
如果使用開發環境多配置檔案設定,可以使用:dev、prod、test進行區分,使用參數 spring.profiles.active=dev 進行指定為開發環境。
# api port
server.port=8080
# 開發環境多配置檔案設定:dev、prod、test
spring.profiles.active=dev
# 服務名稱
spring.application.name=springboot-test
###################################nacos配置#######################################
# nacos 打開監控 配合普羅米修斯進行監控 官方提供了MySQL初始化sql檔案 在conf目錄下:nacos-mysql.sql
# 暴露metrics資料
management.endpoints.web.exposure.include=*
# nacos 配置注冊遠端服務位址{config.server-addr和server-addr}
#spring.cloud.nacos.config.server-addr=192.168.245.132:8848
# nacos 配置注冊與發現{discovery.server-addr}
spring.cloud.nacos.discovery.server-addr=192.168.245.132:8848
#spring.cloud.nacos.discovery.namespace=public
spring.cloud.nacos.config.file-extension=properties
###################################nacos配置#######################################
bootstrap.properties
#bootstrap.properties基礎配置
#服務名稱
spring.application.name=springboot-test
#暴露config配置服務位址(動态更新)
spring.cloud.nacos.config.server-addr=192.168.245.132:8848
#配置config檔案擴充名(properties & yml)
spring.cloud.nacos.config.file-extension=properties
4、springboot入口:配置Application.java
- @SpringBootApplication:sringboot啟動必備注解
- @EnableDiscoveryClient:用于nacos發現用戶端注解
@SpringBootApplication //sringboot啟動必備注解
@EnableDiscoveryClient //用于nacos發現用戶端注解
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
TestController類引入測試代碼:使用 Spring Cloud 原生注解,開啟自動更新。
單一配置場景,通過@Value注解,配置動态配置擷取測試。
多屬性配置場景,可以通過@Autowired 注解注入自定義配置類。
@RestController
@RefreshScope // Spring Cloud 原生注解 開啟自動更新
@RequestMapping(value = "/t")
public class TestController {
/** 使用動态配置擷取測試 --BEGIN-- **/
@Value("${alibaba.config.discovery}")
private String discovery;
@Value("${alibaba.config.name}")
private String name;
@GetMapping("/getConfig")
public String getConfig() {
log.info("getConfig>>>>>>>>>>>");
return "getConfig>>>>>>>>>>>>" + "發現:" + discovery + ">>>服務名稱:" + name;
}
@Value("${custom.config.find}")
private String find;
@Value("${custom.config.say}")
private String say;
@GetMapping("/meet")
public String meet() {
log.info("meet>>>>>>>>>>>");
return "meet>>>>>>>>>>>>" + "偶遇老濕:" + find + ">>>你好:" + say;
}
/** 使用動态配置擷取測試 --END-- **/
}
}
可以根據業務情況而定,将多個配置封裝到一個類裡面,如下所示,建立CustomConf類:
/**
* desc:對象配置類
* @Value
* @Component @ConfigurationProperties
*/
@Component
@ConfigurationProperties(prefix = "custom")
public class CustomConf {
private Integer one;
private Integer two;
private Integer three;
private String description;
// 此處省略掉了 get set 方法,實際需要補上
}
使用到注解:
- @Value :通常情況,使用注解取值。
- @Component :加入注解,便于被掃描到。
- @ConfigurationProperties:引入配置,通過prefix指定配置字首。
在項目中注入:
@Autowired
private CustomConf custom;
@RequestMapping("/custom")
public String custom() {
return "[custom] " + custom;
}
nacos 控制台:建立配置:springboot-test.properties
nacos 控制台:配置詳情:配置的比較随意,參考看看就行
運作服務:
- nohup:代表脫離終端運作
- &:代表放入背景
- -Dspring.profiles.active=prod:指定為生産環境
[root@Centos9-Stream test]# nohup java -jar -Dspring.profiles.active=prod /opt/workspace/test/springboot-nacos-cloud-0.0.1-SNAPSHOT.jar > /opt/
workspace/test/springboot-nacos.log 2>&1 &
[1] 4628
測試接口:
http://192.168.245.132:8082/t/getConfig
你也可以使用curl指令請求:
curl -X GET http://192.168.245.132:8082/t/getConfig
得到輸出結果:
getConfig>>>>>>>>>>>>發現:配置>>>服務名稱:nacos服務
檢視日志驗證:
tail -n 5 springboot-nacos.log
驗證成功,getConfig日志列印出來了。
至此,springboot內建微服務元件nacos關聯完成,詳細說明可以參考上一篇文章,文初有說明,這裡不在贅述。
實際使用過程中,難免會遇到各種問題,此時不用慌,有詳細官方文檔可供參考。如下引入了nacos部分文檔,解決搭建過程中遇到的問題,提供參考。
nacos版本問題
如果你使用nacos 1.x更新到nacos 2.x版本,建議參考官方相容性說明與更新文檔。
nacos2.0.0版本相容性說明
相容性說明:https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-compatibility.html
目前官網推薦使用nacos2.1.1穩定版,推薦的上一個穩定版本是2.0.3。
Nacos2.0版本相比1.X新增了gRPC的通信方式,是以需要增加2個端口。新增端口是在配置的主端口(server.port)基礎上,進行一定偏移量自動生成。
端口 | 與主端口的偏移量 | 描述 |
9848 | 1000 | 用戶端gRPC請求服務端端口,用于用戶端向服務端發起連接配接和請求 |
9849 | 1001 | 服務端gRPC請求服務端端口,用于服務間同步等 |
使用VIP/nginx請求時,需要配置成TCP轉發,不能配置http2轉發,否則連接配接會被nginx斷開。
用戶端擁有相同的計算邏輯,使用者如同1.X的使用方式,配置主端口(預設8848),通過相同的偏移量,計算對應gRPC端口(預設9848)。
是以如果用戶端和服務端之前存在端口轉發或防火牆時,需要對端口轉發配置和防火牆配置做相應的調整。
nacos更新文檔
更新文檔:https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-upgrading.html
nacos版本與spring cloud對應關系
由于 Spring Boot 3.0,Spring Boot 2.7~2.4 和 2.4 以下版本之間變化較大,目前企業級客戶老項目相關 Spring Boot 版本仍停留在 Spring Boot 2.4 以下,為了同時滿足存量使用者和新使用者不同需求,社群以 Spring Boot 3.0 和 2.4 分别為分界線,同時維護 2022.x、2021.x、2.2.x 三個分支疊代。 為了規避相關建構過程中的依賴沖突問題,我們建議可以通過 雲原生應用腳手架 進行項目建立。
2022.x 分支
适配 Spring Boot 3.0,Spring Cloud 2022.x 版本及以上的 Spring Cloud Alibaba 版本按從新到舊排列如下表(最新版本用*标記): (注意,該分支 Spring Cloud Alibaba 版本命名方式進行了調整,未來将對應 Spring Cloud 版本,前三位為 Spring Cloud 版本,最後一位為擴充版本,比如适配 Spring Cloud 2022.0.0 版本對應的 Spring Cloud Alibaba 第一個版本為:2022.0.0.0,第個二版本為:2022.0.0.1,依此類推)
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
2022.0.0.0-RC* | Spring Cloud 2022.0.0 | 3.0.0 |
2021.x 分支
适配 Spring Boot 2.4,Spring Cloud 2021.x 版本及以上的 Spring Cloud Alibaba 版本按從新到舊排列如下表(最新版本用*标記): (注意,該分支 Spring Cloud Alibaba 版本命名方式進行了調整,未來将對應 Spring Cloud 版本,前三位為 Spring Cloud 版本,最後一位為擴充版本,比如适配 Spring Cloud 2021.0.1 版本對應的 Spring Cloud Alibaba 第一個版本為:2021.0.1.0,第個二版本為:2021.0.1.1,依此類推)
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
2021.0.5.0* | Spring Cloud 2021.0.5 | 2.6.13 |
2021.0.4.0* | Spring Cloud 2021.0.4 | 2.6.11 |
2021.0.1.0 | Spring Cloud 2021.0.1 | 2.6.3 |
2021.1 | Spring Cloud 2020.0.1 | 2.4.2 |
2.2.x 分支
适配 Spring Boot 為 2.4,Spring Cloud Hoxton 版本及以下的 Spring Cloud Alibaba 版本按從新到舊排列如下表(最新版本用*标記):
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
2.2.10-RC1* | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.9.RELEASE* | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.8.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.7.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.6.RELEASE | Spring Cloud Hoxton.SR9 | 2.3.2.RELEASE |
2.2.1.RELEASE | Spring Cloud Hoxton.SR3 | 2.2.5.RELEASE |
2.2.0.RELEASE | Spring Cloud Hoxton.RELEASE | 2.2.X.RELEASE |
2.1.4.RELEASE | Spring Cloud Greenwich.SR6 | 2.1.13.RELEASE |
2.1.2.RELEASE | Spring Cloud Greenwich | 2.1.X.RELEASE |
2.0.4.RELEASE(停止維護,建議更新) | Spring Cloud Finchley | 2.0.X.RELEASE |
1.5.1.RELEASE(停止維護,建議更新) | Spring Cloud Edgware | 1.5.X.RELEASE |
元件版本關系
版本說明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明
每個 Spring Cloud Alibaba 版本及其自身所适配的各元件對應版本如下表所示(注意,Spring Cloud Dubbo 從 2021.0.1.0 起已被移除出主幹,不再随主幹演進):
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
2021.0.5.0 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2.2.10-RC1 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2022.0.0.0-RC1 | 1.8.6 | 2.2.1-RC | 4.9.4 | ~ | 1.6.1 |
2.2.9.RELEASE | 1.8.5 | 2.1.0 | 4.9.4 | ~ | 1.5.2 |
2021.0.4.0 | 1.8.5 | 2.0.4 | 4.9.4 | ~ | 1.5.2 |
2.2.8.RELEASE | 1.8.4 | 2.1.0 | 4.9.3 | ~ | 1.5.1 |
2021.0.1.0 | 1.8.3 | 1.4.2 | 4.9.2 | ~ | 1.4.2 |
2.2.7.RELEASE | 1.8.1 | 2.0.3 | 4.6.1 | 2.7.13 | 1.3.0 |
2.2.6.RELEASE | 1.8.1 | 1.4.2 | 4.4.0 | 2.7.8 | 1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE | 1.8.0 | 1.4.1 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE | 1.8.0 | 1.3.3 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE | 1.7.1 | 1.2.1 | 4.4.0 | 2.7.6 | 1.2.0 |
2.2.0.RELEASE | 1.7.1 | 1.1.4 | 4.4.0 | 2.7.4.1 | 1.0.0 |
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE | 1.7.0 | 1.1.4 | 4.4.0 | 2.7.3 | 0.9.0 |
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE | 1.6.3 | 1.1.1 | 4.4.0 | 2.7.3 | 0.7.1 |
排查錯誤
啟動時報錯Connection is unregistered.或Client not connected,current status:STARTING.
原因是用戶端gRPC無法和服務端建立連接配接,請先使用telnet ${nacos.server.address}:${nacos.server.grpc.port}進行測試,檢視網絡是否暢通,服務端端口是否已經正确監聽。
Nacos2.0增加了9848,9849端口來進行GRPC通信,我需要在application.properties中額外配置嗎?
不需要,這兩個端口在Nacos2.0内部是通過8848+1000以及8848+1001這種偏移量方式計算出來的,不需要使用者額外在配置檔案中配置。但如果使用的是docker或存在端口轉發方式啟動,需要把這兩個端口進行配置。
啟動nacos2.0時希望用nginx 代理,9848這個端口怎樣處理,要通過nginx暴露出來麼?以及docker是否需要映射?
如果存在防火牆或者nginx端口轉發問題,需要進行相應的端口暴露配置。如在nginx中,在已經暴露8848(x)的基礎上,需要額外暴露9848(x+1000)
解決版本沖突問題時遇到端口未開放
2022-12-07 20:08:13.792 INFO 17152 --- [t.remote.worker] com.alibaba.nacos.common.remote.client : [236c02fe-157b-475e-9540-b11bf110f49e_config-0] Fail to connect server, after trying 2 times, last try server is {serverIp = '192.168.245.132', server main port = 8858}, error = unknown
2022-12-07 20:08:16.213 ERROR 17152 --- [ main] c.a.n.c.remote.client.grpc.GrpcClient : Server check fail, please check server 192.168.245.132 ,port 9858 is available , error ={}
分析問題:檢查192.168.245.132伺服器的端口9858是否可用。如果參考了上面文檔,你會發現我預設端口為8858,nacos2.x使用gRPC通信方式,+1000偏移量檢測9858是否可用,由于防火牆或端口轉發等原因,需要開發相應端口。
開放相應端口
firewall-cmd --zone=public --add-port=9858/tcp --permanent
firewall-cmd --zone=public --add-port=9859/tcp --permanent
重載firewall-cmd服務
firewall-cmd --reload
檢視開放的端口
[root@Centos9-Stream nacos-2.0.4]# firewall-cmd --list-all
public (active)
...
ports: 8848/tcp 9001-9010/tcp 8081/tcp 3000/tcp 8082/tcp 8083/tcp 8858/tcp 9858/tcp
...
啟動多個nacos server服務導緻nacos-server.jar占用 PID 問題
定位問題:檢視nacos.log日志檔案
2022-12-07 20:19:02,601 INFO Starting Nacos v2.0.3 on Centos9-Stream with PID 34970 (/usr/local/nacos/target/nacos-server.jar started by root in /usr/local/nacos-2.0.4)
BASH 複制 全屏
切記切記,以上總結,僅供參考!别人提供的是思考方向,具體實踐還需親自測試印證。
有不足的地方,還望各位大佬輕噴。
END----
靜下心來,才發現原來不會的還有很多。
一分耕耘,一分收獲。
多總結,你會發現,自己的知識寶庫越來越豐富。
養得胸中一種恬靜