nacos配置中心配置已经常见错误总结

本文详细介绍了如何在SpringBoot项目中集成Nacos,涉及基础架构、依赖管理、bootstrap.yml和application.yml配置的区别,以及如何利用Nacos进行远程配置和测试。

前言

🌟 本套mode使用的是Alibaba的2021.0.1版,springboot的2.6.3实现(适用于springboot 2.7~2.4),Nacos使用的最新的2.2.3版本,如果需要看安装nacos和基础搭建可以看我下面的博客!

nacos的安装和基本配置使用可以查看我这篇博客,或者关注下面的专栏后续会持续更新其他的Spring Cloud 组件介绍以及使用
🍅Nacos下载与安装配置(2.2.3版本示例)
🥒Spring Cloud Alibaba专栏

1、基础架构

大致架构如下:

  • 父包指定spring的版本,
  • 在util里存放共用的实体以及共用的一些依赖以及工具类
  • 然后我建立了两个product的Module用来做远程调用时轮询测试
    在这里插入图片描述
    在这里插入图片描述

2、依赖

其他的一些依赖这里就不放了,只放nacos的相关依赖,第一个是服务注册的依赖,第二个是使得加载bootstrap.yml文件在application.yml文件前面加载。第三个是读取nacos配置中心的依赖(该依赖不加无法读取到nacos配置中心的内容,但不会报错!)。第四个是用于自动读取加载和刷新nacos中最新的配置的,@NacosValue注解是依靠它
🔻:如果没有报错,并且配置也没有错,就很大可能是少了这个依赖,或者是nacos的版本和spring的版本不兼容!

        <!--        nacos 服务注册 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
<!--        加载bootstrap文件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
<!--        读取nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <!--            <version>2.2.0.RELEASE</version>-->
        </dependency>
        <!-- 自动配置Nacos相关的配置加载和刷新!:提供了@NacosValue注解使用-->
         <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.12</version>
        </dependency>

3、配置文件

bootstrap配置文件和application配置文件使用区别:

  • bootstrap配置文件用于加载应用程序的基础配置,例如连接配置中心(如Nacos、Consul等)、配置加密等。
  • application配置文件用于加载应用程序的业务配置。

3.1、bolg-product配置文件

两个bolg-product项目配置文件除了端口其他的一样的。

3.1.1、application.yml配置文件

这里不做什么配置就简单的配置名字和端口。

server:
  port: 8203

spring:
  application:
    name: bolg-product

3.1.2、bootstrap.yml配置文件

spring:
  #   注入到nacos
  cloud:
    nacos:
      #配置中心配置
      discovery:
        namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09d
        server-addr: 192.168.0.104:8848
        username: nacos #账号
        password: nacos #密码

      #注册中心配置:主要配置,一般情况下配置前面的就可以了
      config:
        server-addr: 192.168.0.104:8848  #注册的地址
        username: nacos #账号
        password: nacos #密码
        namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09d #命名空间
        file-extension: yml #配置文件的后缀
        prefix: bolg-product #配置文件前缀 ,如果不写 默认使用${spring.application.name}的值
        group: BOLG_GROUP #组名
        auto-refresh: true # 开启自动刷新

	#配置次配置文件:在一些特殊时候可能要配置多个,
      extension-configs:
        - data-id: config-a-dev.yml #配置文件全名
          group: GROUP-A #组名
          refresh: true #是否支持热加载刷新
        - data-id: config-b-dev.yml
          group: GROUP-A
          refresh: false

        #共享配置文件 ---优先级低(比本地的低)
      shared-configs:
        - data-id: application.yml
          group: GROUP-A

3.1.3、nacos远程配置

这个地方的DataID的值是需要是:${prefix}-${spring.profiles.active}.${file-extension}
我这里写的是bolg-order.yml是因为我没有配置spring.profiles.active这个参数

${prefix}如果不写默认会去取${spring.application.name}
在这里插入图片描述

在这里插入图片描述

3.2、bolg-system

3.1.1、application.yml配置文件

因为我要用openfeign远程调用使用加了其他的一些参数配置

server:
  port: 8201
spring:
  application:
    name: bolg-order
#  profiles:
#    active: dev

#        开启负载均衡(默认是不开启的)
feign:
  circuitbreaker:
    enabled: true
#   熔断配置
hystrix:
  command:
    default:
      execution.isolation.thread.timeoutInMilliseconds: 3000 # 设置Hystrix超时时间(毫秒)
    ProductFeignClient#getProducts:
      execution.isolation.thread.timeoutInMilliseconds: 1000 # 为特定的Feign方法设置超时时间

3.1.2、bootstrap.yml配置文件

这个地方我为了对比差异尝试,配置中心和注册中心应该是分开的,他们的配置可以不设置在同一个命名空间里,这里我注册中心配置在了dev空间,而配置中心我放在了默认的public命名空间,不设置${namespace}参数就是默认的命名空间

server:
  port: 8201
spring:
  #   注入到nacos
  cloud:
    nacos:
      #配置中心配置
      discovery:
        namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09d
        server-addr: 192.168.0.104:8848
        username: nacos #账号
        password: nacos #密码

      #注册中心配置
      config:
        server-addr: 192.168.0.104:8848
        username: nacos #账号
        password: nacos #密码
#        namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09d   #不写命名空间默认是public
        file-extension: yml #配置文件的后缀
        prefix: bolg-order #配置文件前缀 ,如果不写 默认使用${spring.application.name}的值
        group: BOLG_GROUP #组名
        auto-refresh: true

3.2.3、nacos远程配置

和上面的区别是命名空间不同
在这里插入图片描述

在这里插入图片描述

4、测试

这里我就加一个测试读取nacos远程文件的接口吧

  • 使用@Value注解也可以读取到远程的内容的,因为它加载时加被加载一起加载到本地了
  • 使用@NacosValue注解需要加第四个依赖才可以读取到远程的内容
@RestController
@RequestMapping("/admin/acl/index")
@Slf4j
public class index {

    @Resource
    private ProductFeignClient productFeignClient;

    @NacosValue(value = "${bolg.name}" ,autoRefreshed = true)
    private String NacosName;

    @Value( "${bolg.name}")
    private String NacosName2;
    @Value("${server.port}")
    private Integer Port;
    /**
     * 测试订单服务是否有问题
     * @author yingfeng
     * @return * @return Result
     */
    @PostMapping("/login")
    public Result login(){
        log.info("nacos名字:{},{},本地端口:{}",NacosName,NacosName2,Port);

        HashMap<String, String> map = new HashMap<>(16);
        map.put("token","token-admin");

        System.out.println();
        return Result.ok(map);
    }

读取到的内容:可以看到如果本地和远程写了同样的内容,优先级上远程的要高一些。
具体的优先级如下:

- 配置文件优先级(由高到低):
nacos远程的配置 -> 本地application.properties -> application.yml ->本地bootstrap.properties -> bootstrap.yml

在这里插入图片描述

在使用Nacos远程配置YAML时,常见错误有以下几种: ### 配置拉取失败 服务拉取不到Nacos配置中心配置信息,会导致服务直接宕机无法运行。若将所有服务的配置信息都配置到一个Nacos的YAML文件中,当Nacos宕机时,整个微服务将无法使用[^1]。 ### 格式错误 在编写YAML配置文件时,格式非常重要。如缩进错误、键值对格式错误等都可能导致配置无法正确解析。例如,一个典型的Nacos集群部署的YAML文件有特定的结构,如果格式不符合要求,就会出现问题。以下是正确的示例: ```yaml apiVersion: v1 kind: Service metadata: name: nacos-cluster spec: type: LoadBalancer selector: app: nacos-server ports: - port: 8848 targetPort: 8848 apiVersion: apps/v1 kind: StatefulSet metadata: name: nacos-cluster spec: serviceName: "nacos-cluster" replicas: 3 selector: matchLabels: app: nacos-server template: metadata: labels: app: nacos-server spec: containers: - image: nacos/nacos-server imagePullPolicy: IfNotPresent name: nacos ports: - containerPort: 8848 env: - name: MODE value: "cluster" ``` ### 本地配置与远程配置冲突 在本地配置文件(如`application.properties`)中,如果没有正确设置初始值,可能会导致启动问题。例如,在`application.properties`文件中,`test.nacos`必须给初始值,否则启动不了,如果读取不到远程配置也会拿这个本地值。以下是一个`application.properties`文件示例: ```properties server.port=8001 test.nacos=1 server.servlet.context-path=/member # 数据库连接 spring.datasource.url=jdbc:mysql://localhost:3306/train_member?time_zone="+8:00" spring.datasource.username=train_member spring.datasource.password=member spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # mybatis xml路径 mybatis.mapper-locations=classpath:/mapper/**/*.xml logging.level.com.jiawa.train.member=trace ``` ### 版本不兼容 Nacos客户端和服务端的版本不兼容,可能会导致配置无法正常拉取或解析。在使用时,需要确保客户端和服务端的版本一致或兼容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值