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/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发布于博客园