天天看點

SpringBoot應用內建微服務元件Nacos的使用指南

作者:小滿隻想睡覺

騷話環節

一入程式設計深似海,從此節操是路人。脫發已是常态,緻富還需絕頂。

那天我聽說程式員之間還互相鄙視,其中不能忍的終極鄙視:有女朋友的程式員鄙視沒有女朋友的程式員。這不能忍,打不過怎麼辦,問就是加入吧。

由于是測試環境,使用版本比較新,學當然要學新知識吸收精華,羽化成仙,做那萬人敬仰韓天尊。啊,不好意思,扯遠了。開個玩笑,我們依舊使用穩定版本。此次在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:做實驗時請檢查是否關安裝防火牆管理工具,關閉防火牆服務或者開啟相應端口,或者放通雲伺服器安全組。

企業中生産環境,唯穩,穩中求快。

可以看到,我再次使用了這張流程圖,在第三篇會總結使用過程。

SpringBoot應用內建微服務元件Nacos的使用指南

Nacos服務快速啟動

關于nacos2.2.0相關配置說明以及資料源說明,遇到問題總結,可以參考如下文章:

https://blog.cnwangk.top/2023/03/30/MySQL資料庫與Nacos搭建監控服務/

使用hexo搭建靜态部落格網站,感興趣可以自己搭建一個,利用github pages和cloudflare pages等進行同步。之是以給出上面的連結,因為一篇優質的教程,會持續更新疊代。當然,在個人公衆号裡面同樣可以搜尋到相關教程。

根據個人或者團隊開發環境,可以選擇架構開發環境:spring、springboot以及springcloud內建nacos。

值得注意的地方

伺服器部署nacos服務支援多種場景:

  1. Nacos原生形式部署。
  2. Nacos Docker形式部署。
  3. 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

SpringBoot應用內建微服務元件Nacos的使用指南

Maven 環境配置

STS4開發工具引入Maven配置

依次找到頂部菜單欄:Window---> Preferences---> Maven--->User Settings--->Global Settings & User Settings--->Apply

配置完記得點選Apply或者Apply and Close

SpringBoot應用內建微服務元件Nacos的使用指南

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倉的聚合倉
google 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應用內建微服務元件Nacos的使用指南

目前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/

第一步

  1. Project:選擇Maven作為項目建構方式
  2. Language:選擇Java作為開發語言
  3. Spring Boot:選擇springboot2.7.6穩定版本作為建構版本
  4. Dependencies:選擇pom依賴的jar包
SpringBoot應用內建微服務元件Nacos的使用指南

第二步

  1. Project Metadata:項目中繼資料,Group組名、Artifact工程名、Name項目名稱、Description項目描述、Package name包名。
  2. Packaging:選擇Jar作為預設打包方式。
  3. Java:選擇JDK17作為Java項目預設建構版本。
  4. GENERATE:生成建構項目demo并下載下傳。
  5. EXPLORE:展示出建構項目結構清單以及檔案具體内容。

以下展示Project Metadata截圖以及EXPLORE截圖。

SpringBoot應用內建微服務元件Nacos的使用指南

EXPLORE:展示項目層次結構

SpringBoot應用內建微服務元件Nacos的使用指南

springboot項目之STS4工具建構

依次選擇File-->new-->Spring Starter Project,或者使用快捷鍵ALT+SHIFT+N。

配置Project步驟一

具體含義參考上面官網建構時說明。

SpringBoot應用內建微服務元件Nacos的使用指南

配置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的使用指南

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

SpringBoot應用內建微服務元件Nacos的使用指南

nacos 控制台:配置詳情:配置的比較随意,參考看看就行

SpringBoot應用內建微服務元件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
           
SpringBoot應用內建微服務元件Nacos的使用指南

驗證成功,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----

靜下心來,才發現原來不會的還有很多。

一分耕耘,一分收獲。

多總結,你會發現,自己的知識寶庫越來越豐富。

養得胸中一種恬靜