赞
踩
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个分布式服务注册、配置管理,以及服务健康管理平台。在微服务架构中,配置管理是至关重要的一环,Nacos 提供了可靠、动态的配置管理功能,为分布式系统的配置中心提供了便捷的解决方案。
Nacos的主要功能图:
Nacos 除了可以作为服务的注册中心,同样可以作为集中管理配置信息的配置中心来使用。我们通过在 Nacos 的控制台中对配置信息进行修改,可以直接作用到应用,避免应用的重新发布,这个过程叫配置的热更新。
下面我们就来一步一步介绍如何在 Spring Cloud 微服务项目里搭建 Nacos 配置中心。
Nacos的安装相对简单,首先需要从官方网站下载最新版本的Nacos Server压缩包。解压后,通过执行相应的启动脚本,即可启动Nacos服务。在启动过程中,可以通过修改配置文件来配置Nacos的各项参数,例如数据库配置、端口号等。
可以参考我之前写过的这篇文章:SpringCloud-搭建Nacos服务中心
首先我们准备好或者创建一个微服务项目,如果不会创建,可以参考:
项目准备好之后,我们引入 Nacos,引入注册中心的流程可以参考下面的文章:
这次,由于我们需要使用到 Nacos 配置管理的功能,所以每个服务模块的 pom.xml 里还需要引入用于 Nacos 配置管理的 jar 包:
- <!-- Maven 依赖 -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
- </dependency>
我们访问 Nacos 的控制台页面,Nacos 控制台默认地址是 localhost:8848/nacos,创建配置:
配置起名为:springcloud-provider.yaml,类型选为 YAML 类型,配置内容我们写一个时间格式:
- pattern:
- dateformat: yyyy-MM-dd HH:mm:ss
其他内容我们先不写,Namespace 用于指定命名空间来实现环境隔离,Namespace 是最外层的环境,向内依次是 Group 和服务。
点击发布,可以看到这条配置已经显示在控制台了。
创建配置成功,接着,我们要去实现项目读取 Nacos 上的配置。
在 /resource 文件夹下创建 bootstrap.yml 文件,和原先的 application.yml 配置文件平级,并将原先配置文件中的 nacos 配置的部分移动到优先级更高的文件 bootstrap.yml 里。
bootstrap.yml:
server: #程序端口号 port: 8083 spring: application: name: springcloud-provider profiles: active: dev cloud: nacos: config: file-extension: yaml username: nacos password: nacos server-addr: 127.0.0.1:8848 discovery: server-addr: 127.0.0.1:8848
原先的 application.yml 变成:
- management:
- endpoints:
- web:
- exposure:
- #公开所有端点
- include: '*'
每个想要进行 Nacos 配置管理的服务模块,不仅需要创建 bootstrap.yml 文件,还需要引入能够在项目启动时自动发现并加载 bootstrap.yml 文件的依赖,在 pom.xml 里添加:
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-bootstrap</artifactId>
- <version>3.0.1</version>
- </dependency>
这样在在项目启动时,bootstrap.yml 文件就可以自动被发现并加载了。
在 Spring Cloud 项目中,我们可以通过注入 @Value 注解来读取 Nacos 中的配置信息。
创建 ConfigController 类:
- package com.example.springcloudprovider.demos.web;
-
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.cloud.context.config.annotation.RefreshScope;
- import org.springframework.web.bind.annotation.*;
-
- @RestController
- @RequestMapping("/config")
- @RefreshScope
- public class ConfigController {
-
- @Value("${pattern.dateformat}")
- private String dateformat;
-
- @GetMapping("dateformat")
- public String now(){
- return dateformat;
- }
-
- }
启动项目,访问测试接口:localhost:8083/config/dateformat
可以看到我们在 Nacos 上配置的日期格式已经被加载到项目里了。
我们在 Nacos 控制台里修改配置,将 dateformat 改为 yyyy-MM-dd HH:mm:ssss
再次访问测试接口:localhost:8083/config/dateformat
可以看到我们的项目配置已经被热更新了,即配置实时更新,不需要重新启动或部署项目。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。