Alibaba Nacos初體驗

Windows 10

nacos-server-2.1.2.zip

nacos-client:2.0.4/2.1.0(依賴的 jar 包)

--

 

序章

官方介紹:

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母簡稱,一個更易於構建雲原生應用的

動態服務發現、配置管理和服務管理

平臺。

 

官網:https://nacos.io

可切換中、英文。

官方文檔:https://nacos.io/zh-cn/docs/what-is-nacos.html

代碼:https://github.com/alibaba/nacos

最新版本:v2.2.0(Dec 14, 2022)

 

和 Spring框架 的關係

可以和 基於Spring框架的應用程序 進行整合,但對 Spring的版本支持有些滯後(截止本文發佈,最高支持Spring Boot 2.6.11)。

阿里雲提供了:雲原生應用腳手架(https://start.aliyun.com/),可以選擇nacos相關組件。

 

和 Spring Cloud Alibaba 的關係

Spring Cloud Alibaba 使用 Nacos提供相關的 動態服務發現、配置管理和服務管理 功能。

 

Windows安裝

下載:

https://github.com/alibaba/nacos/releases

本文下載了 nacos-server-2.1.2.zip(之前下載的)。

 

解壓:

 

單機運行:

命令行進入解壓後的 nacos/bin 目錄,執行下面的命令:

startup.cmd -m standalone

服務已啓動。

默認端口:8848

默認賬號:nacos/nacos

 

訪問:

http://localhost:8848/nacos

進入首頁。

登錄後,進入 配置、服務 管理頁面。

 

nacos服務器運行成功。

 

注意,除了單機部署,還可以進行集羣部署。

注意,建議在內部隔離網絡環境中部署,強烈不建議部署在公共網絡環境

注意,默認配置保存到 nacos/data 目錄下,可以配置爲保存到 MySQL數據庫 中。

注意,還有安全方面的考慮。

 

Spring Boot應用

參考官方文檔進行試驗:Nacos Spring Boot 快速開始

 

項目名:webdemo

spring-boot版本:2.7.3(注,大於 官方指明的 2.6.11)

 

1、添加依賴

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.12</version> <!-- Jul 21, 2022-->
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>0.2.12</version> <!-- Jul 21, 2022 -->
</dependency>

兩個組件的版本都是 0.2.12,它們依賴的 nacos-client 爲 2.1.0。

 

2、更新webdemo的本地配置文件

application.yml:

server:
  port: 10000

spring:
  application:
    name: webdemo
  profiles:
    active:
    - dev

nacos:
  discovery:
    server-addr: localhost:8848
  config:
    server-addr: localhost:8848

 

3、在nacos服務器創建配置

配置名稱:webdemo-dev.yml

內容:

tom:
  age: 12

 

4、在 啓動類使用註解 @NacosPropertySource

加載上面的 配置——webdemo-dev.yml(dataId值)。

支持自動刷新。

 

注意,必須使用 @NacosPropertySource 導入配置,否則,Spring Boot應用獲取不了任何nacos上的配置。

 

5、使用nacos的配置

正常的 @Value 注入。

@Component
@Slf4j
public class AppRunner implements ApplicationRunner {

	@Value("${tom.age}")
	private Integer tomAge;
	
	@Override
	public void run(ApplicationArguments args) throws Exception {
		log.info("nacos config: tom.age={}", tomAge);
	}

}

啓動後:

 

注意,也可以使用官文的 @NacosValue 來獲取。

注意,可以把 application.yml 的 server.port 放到 nacos的配置中。

 

6、動態服務發現&管理

在上面的情況下,webdemo服務沒有被注入到nacos服務器中。

 

對於 Spring Boot 應用程序,從結果來看,默認不會執行自動註冊。

可以通過兩種方式註冊:

1)、com.alibaba.nacos.api.naming.NamingService 實例

2)、Nacos Open API

 

下面是使用 方式 1) 註冊:ben發佈於博客園

@Component
@Slf4j
class NacosRunner implements ApplicationRunner {

	@NacosInjected
	private NamingService namingService;
	
	@Override
	public void run(ApplicationArguments args) throws Exception {
		try {
			namingService.registerInstance("webdemo", "127.0.0.1", 10000);
			log.info("註冊本服務成功");
		} catch (NacosException e) {
			log.warn("註冊服務異常:error={}", e);
		}
	}
	
}

註冊成功:ben發佈於博客園

 

停止服務,此時,nacos服務器顯示沒有註冊 webdemo服務 了。

 

小結

Spring Boot應用 和 nacos服務器 交互是存在一些困難的——自動化程度不夠。ben發佈於博客園

 

Spring Cloud應用

參考官方文檔進行試驗:Nacos Spring Cloud 快速開始

 

項目名:cloudweb

spring-boot版本:2.7.3(注,大於 官方指明的 2.6.11)

spring-cloud版本:2021.0.5

 

1、添加項目依賴

根據 參考資料#1 使用 2021.0.4.0。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2021.0.4.0</version>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2021.0.4.0</version>
</dependency>

 

spring cloud的依賴:ben發佈於博客園

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version> // 2021.0.5
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

 

2、本地項目配置

bootstrap.yml:ben發佈於博客園

spring:
  application:
    name: cloudweb
  profiles:
    active:
    - dev
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        # nacos服務器上的配置的擴展名
        file-extension: yml
      discovery:
        server-addr: localhost:8848

 

3、nacos添加配置

配置名稱:cloudweb-dev.yml

server:
  port: 40000

tom:
  age: 999

 

4、啓動服務:失敗

錯誤日誌:ben發佈於博客園

org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set
...
***************************
APPLICATION FAILED TO START
***************************

Description:

No spring.config.import property has been defined

Action:

Add a spring.config.import=nacos: property to your configuration.
	If configuration is not required add spring.config.import=optional:nacos: instead.
	To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.

原因:bootstrap功能過時了,沒有被引入。

解決:添加 spring-cloud-starter-bootstrap 依賴包。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

見 參考文檔#2

 

5、再次啓動:成功

啓動成功;服務註冊成功。ben發佈於博客園

 

注意,和 官文不同的時,這裏沒有使用註解 @EnableDiscoveryClient,但也完成了服務註冊。

 

6、獲取配置tom.age的值

獲取成功:

當然,之前的端口40000 也是 自動從 nacos 服務器獲取的。ben發佈於博客園

 

小結

Spring Cloud應用 整合到 nacos時,更加自動化了。

 

下一步可以研究下:

1)Nacos服務器的配置;

2)Nacos客戶端的配置;

 

~結束~

 

本文鏈接:ben發佈於博客園

https://www.cnblogs.com/luo630/p/17012792.html

 

參考資料

1、nacos畢業版本依賴關係(推薦使用)

版本說明

2、Spring Cloud配置中心遇到No spring.config.import set問題

https://blog.csdn.net/web18484626332/article/details/124032864

3、

 

ben發佈於博客園

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章