欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【Nacos】配置中心

【Nacos】配置中心

2025/7/9 1:56:27 来源:https://blog.csdn.net/2202_75555590/article/details/145400214  浏览:    关键词:【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-servicespring.cloud.nacos.config.server-addr=120.26.87.94:10020

或者使用bootstrap.yml

spring:application:name: product-servicecloud: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-serviceprofiles:active: devcloud:nacos:config:server-addr: 120.26.87.94:10020namespace: 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
exceptionat 
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地址
在这里插入图片描述


在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词