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

 

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