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/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 實例
下面是使用 方式 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發佈於博客園