前情提要
當你看到此篇文章時,nacos目前最新穩定版本為:2.2.2 (Apr 11, 2023) Latest
版本不在於有多新,在於與當前場景環境匹配正常,穩中求快。萬一你用了比較新的版本,遇到問題怎麼辦?有問題,那就找李元芳吧!開個玩笑。你可以去 nacos 的github倉庫issues提問、追問選擇解決方案,促進開源社群的和諧發展。
第一篇基礎篇,可在部落格園搜尋:MySQL資料庫與Nacos搭建監控服務。
本篇是個人nacos系列文章第二篇springboot專案整合微服務元件nacos。
整體思路,個人nacos系列博文一共分為三篇:
- 基礎篇:《MySQL資料庫與Nacos搭建監控服務》,Nacos與MySQL基本介紹。
- 開發篇:《開發篇:springboot與微服務元件nacos》,從程式碼開始構建,整合微服務元件。
- 運維篇:《運維篇:nacos prometheus grafana》,服務監控篇,主要以Linux發行版為主。
騷話環節
一入程式設計深似海,從此節操是路人。脫髮已是常態,致富還需絕頂。
那天我聽說程式設計師之間還相互鄙視,其中不能忍的終極鄙視:有女朋友的程式設計師鄙視沒有女朋友的程式設計師。這不能忍,打不過怎麼辦,問就是加入吧。
由於是測試環境,使用版本比較新,學當然要學新知識吸收精華,羽化成仙,做那萬人敬仰韓天尊。啊,不好意思,扯遠了。開個玩笑,我們依舊使用穩定版本。此次在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發行包下載地址:
下載編譯後壓縮包方式,您可以從 最新穩定版本 下載 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
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中央倉庫作為下載源,速度更快更穩定。
線上搜尋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專案之官網構建
第一步
- 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)
參考資料:
- springboot2.7.x官方文件:https://docs.spring.io/spring-boot/docs/2.7.10/reference/pdf/spring-boot-reference.pdf
- nacos2.x官方文件:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
- prometheus官方文件:https://prometheus.io/docs/prometheus/2.37/getting_started/
- grafana官方文件:https://grafana.com/docs/grafana/latest/getting-started/
切記切記,以上總結,僅供參考!別人提供的是思考方向,具體實踐還需親自測試印證。
有不足的地方,還望各位大佬輕噴。
END----
靜下心來,才發現原來不會的還有很多。
一分耕耘,一分收穫。
多總結,你會發現,自己的知識寶庫越來越豐富。