当前位置: 首页 > article >正文

【Nacos】配置中心

目录

  • 为什么需要配置中心?
  • 快速上手
      • 添加配置
      • 获取配置
  • 配置中心详解
      • 设置命名空间
      • Data Id
  • 可能出现的问题
      • 读取不到配置项
      • No spring.config.import property has been defined
      • NacosServer地址配置错误

除了注册中心和负载均衡之外,Nacos还是一个配置中心,具备配置管理的功能
Namespace的常用场景之一是不同环境的配置区分隔离.例如开发测试环境和生产环境的配置隔离

在这里插入图片描述

为什么需要配置中心?

当前项目的配置都在代码中,会存在以下问题

  1. 配置文件修改时,服务需要重新部署.微服务架构中,一个服务可能有成百个实例,个部署比较麻烦,且容易出错
  2. 多人开发时,配置文件可能需要经常修改,使用同一个配置文件容易冲突

配置中心就是对这些配置项进行统一管理.通过配置中心,可以集中查看,修改和删除配置,无需再逐个修改配置文件,提高效率的同时,也降低了出错的风险
在这里插入图片描述


快速上手

通过接下来的操作,我们来初步认识Nacos配置中心的使用
参考文档:Nacos Spring Cloud 快速开始 Nacos config

添加配置

在Nacos控制台添加配置项: 配置管理 -> 配置列表 -> 创建配置
在这里插入图片描述

🔥注意:配置管理的命名空间和服务列表的命名空间是隔离的,两个是分别设置的.默认是public也就是服务管理命名空间配置配置管理的命名空间

新建配置项
在这里插入图片描述

配置内容

nacos.config=public

说明:

  1. DataID设置为项目名称
  2. 配置内容的数据格式,目前只支持properties和yam类型
  3. 设置配置内容

获取配置

引入NacosConfig依赖

     <dependency>
        <groupId>comalibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
     </dependency>
     <!--Springcoud2020.*之后版本需要引入bootstrap-->
       <dependency>
        <groupId>org·Springframeworkcloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>

配置bootstrap.properties

微服务启动前,需要先获取nacos中配置,并与application.ym配置合并.在微服务运行之前,Nacos要求必须使用bootstrap.properties配置文件来配置NacosServer地址

 spring·application.name=product-service
 spring.cloud.nacos.config.server-addr=120.26.87.94:10020

或者使用bootstrap.yml

spring:
  application:
    name: product-service
  cloud:
    nacos:
      config:
        server-addr: 120.26.87.94:10020

spring·application.name 需要和nacos配置管理的DataID一致
spring·cloudnacos·configserver-addr 为NacosServer的地址

🔥注意:配置中心和注册中心的配置是隔离的
Nacos 配置中心:spring.cloud.nacos.config.server-addr
Nacos 注册中心:spring·cloud.nacosdiscovery·server-addr

我们这里来编写程序用来进行接口的调用

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RefreshScope//配置热更新
@RestController
public class NacosController {
    @Value("${nacos.config}")
    private String nacosConfig;
    @RequestMapping("/getConfig")
    public String getConfig(){
        return "从nacos获取配置项nacos.config: "+nacosConfig;

    }
}
  • @Value注解用于读取配置
  • @RefreshScope配置热更新

接口测试

启动程序,访问接口:http://127.0.0.1:9090/getConfig
在这里插入图片描述
再在Nacos控制台修改一下配置,再次访问接口

在这里插入图片描述


配置中心详解

设置命名空间

Nacos配置管理的命名空间和服务列表的命名空间是分别设置的.默认是public
Nacos命名空间配置依然在bootstrap.properties中进行配置

spring.cloud.nacos.config.namespace: fe1ccbc5-00b6-423e-bb48-6b699010641a

对应的yml文件配置:

spring:
  cloud:
    nacos:
      config:
        namespace: fe1ccbc5-00b6-423e-bb48-6b699010641a #配置中心的命名空间

命名空间的Id也可以观察到:

在这里插入图片描述

Data Id

DataId格式介绍:

在NacosSpringcloud中,dataId的完整格式如下:

 ${prefix}-${spring·profiles.activet}.${file-extension}
  • prefix 默认为spring.application.name的值,也可以通过配置项spring·coud·nacosconfig·prefix来配置
  • spring·profiles.active即为当前环境对应的profile.当spring·profiles.active为空时,对应的连接符也将不存在,datald的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension为配置内容的数据格式,可以通过配置项spring·cloud.nacos·config·file-extension来配置。目前只支持properties和yaml类型.默认为properties.

bootstrap.yml中添加spring·profiles.active 值

spring:
  profiles:
    active: dev

微服务启动时,会从Nacos读取多个配置文件:

 ${prefix}-${spring·profiles.activet}.${file-extension}
 ${prefix}.${file-extension}
 ${prefix}

通过观察日志我们也可以直观地看到

在这里插入图片描述
这三个日志文件的优先级:

product-service-dev.properties > product-service.properties > product-service

简单理解就是名字越长,优先级越高

简单进行一下配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
别忘了进行配置文件的更改:

spring:
  application:
    name: product-service
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 120.26.87.94:10020
        namespace: fe1ccbc5-00b6-423e-bb48-6b699010641a #配置中心的命名空间

再来访问接口:
在这里插入图片描述
删掉product-service-dev.properties再进行访问
在这里插入图片描述
删掉product-service.properties再访问
在这里插入图片描述

注意:
bootstrap.yml设置的配置格式必须和nacos控制台配置的数据格式保持一致
不设置配置格式(spring.cloud.nacos.config.file-extension)时,默认为properties


可能出现的问题

读取不到配置项

可能原因:

  • 配置错误:检查配置DataID,配置格式,配置空间等
  • 未引入依赖

No spring.config.import property has been defined

***************************
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.properties是系统级的资源配置文件,用于程序执行更加早期配置信息读取.但是Springcloud2020.之后的版本把bootstrap禁用了,导致在读取文件的时候读取不到而报错,所以需要重新导入bootstrap包进来就可以了

NacosServer地址配置错误

报错信息如下:

2025-1-30T17:12:53.070+08:00 ERROR 14356 --- [t.remote.worker] 
c.a.n.c.remote.client.grpc.GrpcClient : Server check fail, please check 
server 127.0.0.1 ,port 11020 is available , error ={}
java.util.concurrent.ExecutionException: 
com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io
exception
 at 
com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.ge
tDoneValue(AbstractFuture.java:566) ~[nacos-client-2.2.1.jar:na]
 at 
com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.ge
t(AbstractFuture.java:445) ~[nacos-client-2.2.1.jar:na]
// ...

Caused by: com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException:
UNAVAILABLE: io exception
at 
com.alibaba.nacos.shaded.io.grpc.Status.asRuntimeException(Status.java:539) 
~[nacos-client-2.2.1.jar:na]
at 
com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClos
e(ClientCalls.java:544) ~[nacos-client-2.2.1.jar:na]
at 
com.alibaba.nacos.shaded.io.grpc.internal.DelayedClientCall$DelayedListener$
3.run(DelayedClientCall.java:471) ~[nacos-client-2.2.1.jar:na]
// ...
Caused by: 
com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChann
el$AnnotatedConnectException: Connection refused: no further information: 
/127.0.0.1:11020
Caused by: java.net.ConnectException: Connection refused: no further
information
at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
at 
java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:
946) ~[na:na]

可能原因:
我们可能设置了错误的Nacos Server地址,检查一下是否填写了正确的Server地址
在这里插入图片描述


在这里插入图片描述


http://www.kler.cn/a/527868.html

相关文章:

  • minimind - 从零开始训练小型语言模型
  • 深度解析:网站快速收录与服务器性能的关系
  • 在Ubuntu子系统中基于Nginx部署Typecho
  • mysql教程
  • C#方法(练习)
  • vue3中el-input无法获得焦点的问题
  • Rust 条件语句
  • 仿真设计|基于51单片机的景区人数管理系统仿真
  • android安卓用Rime
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.29 内存奥秘:跨语言内存管理实战
  • 智能码二维码的成本效益分析
  • MySQL数据库(二)- SQL
  • 算法随笔_33: 132模式
  • deepseek核心技术:MLA架构-多头潜在注意力
  • python 使用Whisper模型进行语音翻译
  • canvas的基本用法
  • @EventListener底层原理(超详细)| @TransactionalEventListener底层原理 | 事务同步
  • 列表导出功能
  • 深度解析:网站快速收录与服务器性能的关系
  • DeepSeek的介绍
  • 2025:影刀RPA使用新实践--CSDN博客下载
  • 【AIGC专栏】AI在自然语言中的应用场景
  • 用QT做一个网络调试助手
  • 芯片AI深度实战:让verilog不再是 AI 的小众语言
  • 开发过程中如何减少属性注释?
  • Cursor 背后的技术栈:从 VS Code 到 AI 集成