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

2023-12-24 23:55:24

前言

🌟 本套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

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_52315708/article/details/135185310
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。