SpringCloud Alibaba之Nacos注册中心学习笔记(包含注册中心以及配置中心)(二)

简介: SpringCloud Alibaba之Nacos注册中心学习笔记(包含注册中心以及配置中心)(二)

三、配置中心


原本我们是写在每个配置文件中的,若是我们要修改配置文件,那么就需要去重新打包然后部署,对于在微服务时代,可能会有大量的重复实例,难道要重新去一个个重启部署吗?


3.1、配置文件持久化介绍


在nacos配置中心中我们可以根据不同的分组来进行管理我们的配置文件,并且对应的服务也能够进行动态去读取配置文件的最新内容,在nacos配置中心里其配置是进行持久化存储的,其是存储在mysql数据库当中。



3.2、实战四:nacos-config服务读取配置中心文件


nacos控制台添加配置文件




注意了,配置格式一定要选择yaml,因为之后我们配置文件配置的文件类型就是yaml,否则会一直读取不到的!


接着点击发布即可:



nacos-config服务构建读取配置文件



引入依赖:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>


1、开启服务注册注解:


@EnableDiscoveryClient


2、配置类User:


package com.changlu.nacosconfig.config;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @Description:
 * @Author: changlu
 * @Date: 10:58 PM
 */
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @Value("${user.username}")
    private String username;
    @Value("${user.age}")
    private Integer age;
    @Value("${user.sex}")
    private String sex;
    @Value("${user.hobby}")
    private String hobby;
    @Value("${user.height}")
    private Integer height;
}



3、添加一个控制器,在控制器中会去返回读取配置信息的内容


package com.changlu.nacosconfig.controller;
import com.changlu.nacosconfig.config.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Description:
 * @Author: changlu
 * @Date: 11:06 PM
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private User user;
    @GetMapping("/info")
    public String getUserInfo() {
        System.out.println(user);
        String res = this.user.toString();
        //注意:添加了@RefreshScope注解不能在mvc的方法中直接返回,因为该user是代理类,进行序列化会进行报错!
        return res;
    }
}



4、关键的来了,配置文件的参数设置


bootstrap.yml:该配置会先于application.yaml读取
server:
  port: 8081
spring:
  application:
    name: nacos-config
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        # 指定命名空间和组名(默认是去public空间及DEFAULT_GROUP组中去找)
#        namespace: 477245fa-d5e1-47e0-9580-4a8e268c3f58   # 若是不指定,默认就是public
#        group: B_GROUP   # 若是不指定,默认是DEFAULT_GROUP
        # 关键两个读取配置的信息
        # prefix: nacos-config  # 配置文件的前缀
        file-extension: yml  # 文件类型



可以看到在这里配置中并没有去指定命名空间以及组名,那么此时就表示默认是去public空间以及DEFAULT_GROUP组去查找。

对于配置文件的名字会如下进行搜索:当前是在public空间、`DEFAULT_GROUP组``



注意:一旦我们指定指定的命名空间与组时,那么就会去该组中查找是否有该配置,若是没有项目会在启动过程中就会报错!


我尝试了下,报错内容如下:



测试

还是依据上面的配置来进行启动,接着去访问接口:http://localhost:8081/user/info



成功读取到配置!


3.3、动态刷新配置类信息(两种方案)


注意:添加了@RefreshScope注解不能在mvc的方法中直接返回,因为该user是代理类,进行序列化会进行报错!


方式一:读取某个属性使用@Value注解,并在对应的配置类上添加@RefreshScope


import org.springframework.cloud.context.config.annotation.RefreshScope;
@RefreshScope  //刷新配置注解
public class Config {
    @Value("${config.name}")
    private String name;
    @Value("${config.type}")
    private String type;



方式二:直接使用@ConfigurationProperties 读取配置,如下


@ConfigurationProperties(prefix = "config")
public class Config {
    private String name;
    private String type;
}


3.4、实战五:多环境读取配置、共享多组配置变量以及扩展多组配置文件


nacos读取配置中心流程补充

下面图例来自:Nacos实现配置管理及集群搭建,觉得讲的很清晰直接拿来了,如有侵权,联系我删除。


在没加入 Nacos 配置之前,获取配置是这样:



加入 Nacos 配置,它去读取远程nacos的配置文件是在 application.yml 之前的:



所以我们此时不能够在application.yml中来去配置远程nacos的配置中心地址,应当在更高优先级的bootstrap.yml文件中来进行配置:



这就是我们为什么要再bootstrap配置文件中进行书写配置的原因了!


实操测试

在nacos中提供了多环境读取配置、共享多组配置变量以及扩展多组配置文件。


多环境读取配置:只需要你进行添加spring.application.active变量来进行指定即可。

共享多组配置变量:nacos中提供了shared-configs配置参数,你可以来配置多条相同命名空间不同组的配置文件。

扩展多组配置文件:nacos中提供了extension-configs配置参数,你可以来配置多条相同命名空间不同组的配置文件。

下面就来尝试下:



准备好我们的配置类以及一个控制器来进行输出配置类信息:


package com.changlu.nacosconfig.config;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
 * @Description:
 * @Author: changlu
 * @Date: 10:12 AM
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
//@RefreshScope
@ConfigurationProperties(prefix = "config")
public class Config {
//    @Value("${config.name}")
    private String name;
//    @Value("${config.type}")
    private String type;
    private String envSharedValue;
    private String a;
    private String b;
}



控制器类:


package com.changlu.nacosconfig.controller;
import com.changlu.nacosconfig.config.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Description:
 * @Author: changlu
 * @Date: 11:06 PM
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private Config config;
    @GetMapping("/config")
    public String getUserInfo() {
        String res = config.toString();
        return res;
    }
}


配置类:


server:
  port: 8088
spring:
  application:
    name: nacos-config
  profiles:
    active: pro
  cloud:
    nacos:
      username: nacos
      password: nacos
      config:
        server-addr: localhost:8848  # 注册到nacos的注册中心的服务地址
        namespace: 477245fa-d5e1-47e0-9580-4a8e268c3f58   # 若是不指定,默认就是public
        group: A_GROUP   # 若是不 指定,默认是DEFAULT_GROUP
        file-extension: yaml  # 文件类型
        shared-configs:  # 共享变量
          - data-id: nacos-config.yaml
            group: DEFAULT_GROUP
            refresh: true # 是否支持刷新
        extension-configs:  # 扩展配置文件
          - data-id: nacos-config-a.yaml
            group: A_GROUP
            refresh: true # 是否支持刷新
          - data-id: nacos-config-b.yaml
            group: B_GROUP
            refresh: true # 是否支持刷新


首先是多环境变量的解释:





接下来是多组共享变量的解释:



最后则是多组扩展配置文件的解释:



之后我们来进行测试一下:


①设置成dev来进行启动:




调用接口测试一下:



②接着设置成pro来测试一下:




没得问题!


3.5、配置文件中心总结(包含不同位置文件写什么、优先级、示例)


一般nacos项目的话,会在本地配有一个bootstrap配置文件,然后远端配置好多环境配置文件,以及一些公共的配置项,这就可能用到共享配置以及扩展配置了!


那么在不同文件中具体写什么呢?


1、boostrap.yml:应用名称,nacos的注册中心配置以及配置文件读取指定。


2、远端配置:


多环境:端口、测试环境、生产环境的密码等。

公共:redis配置、mysql配置等等。

扩展:项目自定义的一些配置项。

配置项优先级介绍:


1、针对于多组配置如公共、扩展的。


上述两类配置都是数组,对同种配置,数组元素对应的下标越⼤,优先级越⾼。也就是排在后⾯的相同配置,将覆盖排在前⾯的同名配置。


例如:同为扩展配置(公共配置同样如此),存在如下优先级关系:extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0。

2、不同种类配置的优先级:主配置 > 扩展配置(extension-configs) > 共享配置(shared-configs)。


看下我在阅读其他博文中给出的配置示例:


相关文章
|
2月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
448 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
30天前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
123 4
|
2月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
303 16
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
207 5
|
3月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
69 5
|
5月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
2月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
2月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
2月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇