首页 > 其他分享 >Nacos配置中心简单使用(直接可以上手)

Nacos配置中心简单使用(直接可以上手)

时间:2024-07-13 23:55:51浏览次数:19  
标签:服务 配置文件 spring 配置 nacos Nacos 简单

本文主要学习和使用Nacos的配置中心

1. Nacos简介

Nacos 是一个开源的服务发现和配置管理平台,主要用于微服务架构中。Nacos 的名字源自于 “Naming and Configuration Service” 的缩写,它提供了两大核心功能:服务发现和服务配置

特性

  • 服务发现:是微服务架构中的一个关键概念,它允许服务之间相互发现和通信。Nacos支持基于DNS和基于RPC的服务发现。它允许服务提供者在启动时注册自己,并允许服务消费者通过服务名查找服务,从而实现服务之间的解耦;

  • 配置中心:动态配置服务是Nacos的另一个重要功能。它允许你在所有环境中以集中和动态的方式管理所有服务的配置。配置的更改可以自动推送到使用该配置的服务,实现配置的热更新;

  • 动态 DNS 服务:Nacos支持动态DNS服务,可以通过它管理云原生应用的服务发现和服务管理;

  • 服务和元数据管理:Nacos提供了服务的元数据管理功能,可以通过它进行服务信息的存储和查询;

  • 动态服务发现、配置、元数据及流量管理:Nacos提供了一系列动态管理功能,帮助用户更好地管理服务。

2. 配置中心介绍

服务配置在软件开发中是一个至关重要的环节,尤其是在分布式系统和微服务架构中,它涉及到如何在多个服务之间管理和分发配置信息。服务配置的主要目的是为了使服务能够适应不同的运行环境,以及能够在运行时动态地调整其行为。

关于配置文件的问题

  1. 软件开发的复杂性:随着软件系统变得越来越复杂,它们通常由多个组件和服务组成。这些服务可能运行在不同的环境中(开发、测试、生产等),每个环境可能有不同的配置需求。这就使管理起来很困难;
  2. 多环境配置:在传统的单体应用中,配置文件通常与环境紧密相关。随着微服务架构的流行,每个微服务可能有自己的配置文件,而且每个环境都需要一套配置。手动管理这些配置容易出错,且难以维护;
  3. 配置的动态性:现代应用经常需要根据不同的运行时条件动态调整配置。例如,根据负载情况自动扩展服务实例,或者在出现问题时快速切换到备用服务;
  4. 配置的一致性:在分布式系统中,确保所有服务实例都使用相同的配置是非常重要的。不一致的配置可能导致服务行为异常,影响系统的稳定性和可靠性;
  5. 安全性:配置文件可能包含敏感信息,如数据库密码、API密钥等。这些信息需要被安全地存储和传输,避免泄露风险。

服务配置的主要需求

  1. 集中管理:需要一个中央配置管理服务来统一管理所有服务的配置;
  2. 动态更新:能够在不重启服务的情况下,动态地更新配置;
  3. 版本控制:配置的变更需要被版本化,以便追踪变更历史和回滚到之前的配置;
  4. 环境隔离:不同环境(开发、测试、生产)的配置应该隔离,避免配置混乱;
  5. 权限控制:对配置的访问需要权限控制,确保只有授权的用户可以修改配置;
  6. 容错和恢复:配置服务需要具备高可用性,能够在部分故障的情况下继续工作,并且能够从故障中恢复。

服务配置管理平台:

为了满足上述需求,服务配置管理平台如Nacos、SpringCloudConfig、Consul、Apollo等应运而生。这些平台提供了以下功能:

  • 服务配置的集中存储和分发;
  • 动态配置更新和配置推送;
  • 配置版本控制和回滚;
  • 环境隔离和配置加密;
  • 权限控制和审计日志;
  • 高可用性和故障转移机制。

通过使用这些配置管理平台,开发者和运维人员可以更有效地管理和维护分布式系统中的服务配置,从而提高系统的灵活性和可维护性。

简单来说就是我们可以把配置文件里的业务配置统一放到Nacos中管理(SpringBoot的application.yaml),在项目运行期间还可以动态的修改

3. Nacos安装

需要确保系统上具有Java环境

java -version

3.1 Windows安装

  1. 下载

Nacos官网

Github地址
在这里插入图片描述

  1. 解压
    在这里插入图片描述

  2. 配置MySQL数据库,新建nacos数据库,并执行nacos/conf下面的mysql-schema.sql(非必须)

  3. 根据需要修改nacos/conf下面的application.properties配置文件

    # 当配置了数据库,需要把下面这五项去掉注解,改成自己的
    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=root
    db.password.0=root
    
    # nacos.core.auth.enabled登录校验,为true时需要登录,为false不需要登录
    nacos.core.auth.enabled=true 
    # 需要登录时,未配置数据库则使用一下配置作为用户名和密码
    nacos.core.auth.system.username=nacos
    nacos.core.auth.system.password=nacos
    # 设置客户端连接key、value
    nacos.core.auth.server.identity.key=nacos
    nacos.core.auth.server.identity.value=nacos
    # 公开默认值,可用于临时测试,实际使用时请务必更换为自定义的其他有效值。(必填)
    nacos.core.auth.default.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
    nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
    
    # 权限,默认是所有权限(非必填)
    nacos.core.auth.system.authority=nacos
    
    # 改为false,不然可能会绕过权限检验
    nacos.core.auth.enable.userAgentAuthWhite=false
    
  4. 启动Nacos,在nacos/bin下面,命令行startup.cmd -m standalone,由于是单机启动,要加standalone
    在这里插入图片描述

  5. 访问Nacos控制台

    启动Nacos后,可以通过浏览器访问Nacos的控制台,默认地址为http://localhost:8848/nacos。
    在这里插入图片描述

3.2 Linux(CentOS7)安装

  1. 下载Nacos

    从Nacos的GitHub tag页面下载最新的Nacos安装包,找到对应版本压缩包,鼠标右键复制链接地址。例如,使用wget命令下载:

    wget https://github.com/alibaba/nacos/releases/download/2.2.1/nacos-server-2.2.1.tar.gz
    
  2. 解压安装包

    下载完成后,解压安装包到指定目录,版本指定自己的:

    tar -xzf nacos-server-2.3.2.tar.gz
    mv nacos /usr/local
    
  3. 修改配置,可以按照上面Windows根据实际情况修改

  4. 启动Nacos

    进入Nacos的bin目录,然后启动Nacos服务。Nacos默认是以单机模式启动:

    cd /usr/local/nacos/bin
    sh startup.sh -m standalone
    
  5. 设置开机自启(可选)

    如果希望Nacos开机自启,可以将启动命令添加到/etc/rc.d/rc.local文件中:

    echo 'sh /path/to/nacos/bin/startup.sh -m standalone' >> /etc/rc.d/rc.local
    

    确保/etc/rc.d/rc.local文件具有执行权限

    chmod +x /etc/rc.d/rc.local
    

3.3 Docker安装

确保系统安装了Docker

  1. 拉取Nacos镜像

    docker pull nacos/nacos-server
    
  2. 修改配置文件

    vim /mydata/nacos/init.d/custom.properties
    
  3. 运行Nacos容器

    docker run -d --name nacos-standalone -e MODE=standalone -p 8848:8848 nacos/nacos-server
    

    如果需要使用自定义的配置文件,可以将本地配置文件挂载到容器中:

    docker run -d --name nacos-standalone -e MODE=standalone -p 8848:8848 -v /path/to/your/logs:/home/nacos/logs 
    -v /path/to/your/application.properties:/home/nacos/conf/application.properties nacos/nacos-server
    

    这里的参数说明如下:

    • -d:后台运行容器。

    • --namenacos-standalone:指定容器名称。

    • -eMODE=standalone:指定运行模式为单机模式。

    • -p8848:8848:映射端口,将容器的8848端口映射到宿主机的8848端口。

    • -v/path/to/your/application.properties:/home/nacos/conf/application.properties参数用于将本地的application.properties文件挂载到容器的/home/nacos/conf目录下

  4. 访问Nacos控制台

  5. 停止和删除容器(可选)

    当需要停止Nacos服务时,可以使用以下命令:

    docker stop nacos-standalone
    

    如果要删除容器,可以使用以下命令:

    docker rm nacos-standalone
    

4. Nacos配置中心的使用

基于SpringBoot的项目

4.1快速使用Demo

  1. 项目目录结构
    在这里插入图片描述

  2. 添加依赖pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.thkl</groupId>
        <artifactId>Nacos-Service</artifactId>
        <packaging>jar</packaging>
        <name>Nacos-Service</name>
        <version>1.0-SNAPSHOT</version>
    
        <parent>
            <!-- SpringBoot版本 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.5.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- Nacos配置中心依赖 -->
            <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
              <version>2.2.2.RELEASE</version>
            </dependency>
            <!-- Nacos注册中心依赖,可不添加,用不到 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>2.2.2.RELEASE</version>
            </dependency>
            <!-- Springboot是2.4以上的版本,增加以下依赖 -->
            <!-- <dependency> -->
            <!--     <groupId>org.springframework.cloud</groupId> -->
            <!--     <artifactId>spring-cloud-starter-bootstrap</artifactId> -->
            <!-- </dependency> -->
        </dependencies>
    
        
        <build>
    
        </build>
    
    </project>
    
  3. 配置文件

    配置文件优先级(由高到低):bootstrap.properties->bootstrap.yml->application.properties->application.yml

    建议把nacos配置放在bootstrap.propertiesbootstrap.yml这里面,不然有一些配置可能不生效

    spring:
      cloud:
        nacos:
          config:
            # Nacos Config 服务地址
            server-addr: 127.0.0.1:8848
            # 配置分组
            group: DEFAULT_GROUP
            # 配置命名空间
            namespace: public
            # Data ID
            prefix: nacos-service
            # 配置文件扩展名
            file-extension: yaml
    

    其他配置放在application.***里

    server:
      port: 8081
    spring:
      application:
        name: nacos-service
      profiles:
        active: dev
    
  4. 应用启动类

    在SpringBoot应用的启动类上添加@EnableDiscoveryClient注解:

    @SpringBootApplication
    @EnableDiscoveryClient
    public class NacosApplication{
        public static void main(String[] args) {
            SpringApplication.run(NacosApplication.class, args);
        }
    }
    
  5. Nacos配置文件管理

    SpringBoot会自动加载Nacos配置中心的配置文件。在Nacos控制台中,可以创建和修改配置文件,配置管理->配置列表
    在这里插入图片描述

  6. 使用配置

    在SpringBoot应用中,可以通过@Value注解、@ConfigurationProperties注解或@Environment 对象来注入配置,一定一定要加个默认值,不然读取不到Nacos配置中心的值时会报错。

    @Value("${com.thkl.username:default}")
    private String username;
    
    @ConfigurationProperties(prefix = "com.thkl.username")
    public class MyConfigProperties {
        private String username;
    }
    

    具体使用

    @RestController
    @RefreshScope
    public class NacosController {
        @Value("${com.thkl.username:thkl}")
        private String username;
    
        @GetMapping("user")
        public String userInfo(){
            return "获取nacos中配置:" + username;
        }
    }
    
  7. 启动访问
    在这里插入图片描述

4.2 Nacos配置属性

Data Id

Data Id配置文件的唯一标识,Data Id命名匹配规则如下:

${prefix}-${spring.profiles.active}.${file-extension} 
${prefix}.${file-extension}
${prefix}
  • prefix:默认是spring.cloud.nacos.config.prefix的值,如果没有配置则使用spring.application的值
  • spring.profiles.active:对应的环境prodev
  • file-extension:配置文件扩展名,spring.cloud.nacos.config.file-extension的值,支持多种文件格式text、json、xml、yaml、html、properties、toml
  • 按从上往下的优先级依次匹配
命名空间

进行配置文件的不同环境隔离,开发、测试、生产环境等。

可以在左侧菜单命名空间进行命名空间的创建和编辑

在项目Nacos配置文件中需要指定对应的命名空间,指定的是命名空间ID

spring.cloud.nacos.config.namespace=命名空间ID

分组

进行业务隔离

在项目Nacos配置文件中需要指定对应的分组

spring.cloud.nacos.config.group=xxx

动态刷新

如果配置文件发生改变,项目可以实时刷新新内容

在需要获取配置内容的地方加上@RefreshScope注解

@RestController
// 动态刷新
@RefreshScope
public class UserController {
 
    @Value("${com.thkl.username:thkl}")
    private String username;
 
    @GetMapping("user")
    public String userInfo(){
        return "获取nacos中配置:" + username;
    }
}

还需在Nacos配置文件中开启动态刷新

spring.cloud.nacos.config.refresh-enabled=true

多文件配置

当环境中引入的中间件较多时,可以配置多个文件,方便管理维护

spring:
  cloud:
    nacos:
      config:
        shared-configs[0]:
          data-id: nacos-service
          group: DEFAULT_GROUP
          refresh: true
        shared-configs[1]:
          data-id: nacos-service-dev
          group: DEFAULT_GROUP
          refresh: true

4.3 nacos存放哪些配置信息,为什么不把Spring的所有配置都放到nacos上

Nacos配置中心主要用于存储和管理微服务架构中的配置信息,它支持多种配置格式,如properties、yaml、json等。Nacos存放的配置信息通常包括:

  1. 服务发现相关配置:包括服务地址、端口、实例元数据等;
  2. 配置中心相关配置:如命名空间、配置分组、配置文件扩展名等;
  3. 应用配置:应用的基本配置,如数据库连接信息、缓存配置、日志级别等;
  4. 环境变量:应用运行时所需的环境变量;
  5. 业务逻辑配置:应用的业务逻辑配置,如功能开关、限流阈值等。

Nacos不建议将Spring的所有配置都放到Nacos上,原因如下:

  1. 性能考虑:Spring的某些配置(如Bean定义)是运行时动态加载的,如果这些配置也放在Nacos上,可能会导致Nacos的性能问题;
  2. 配置分离:将配置分为不同的层级,如应用配置、业务配置等,可以更好地组织和管理配置数据;
  3. 安全性:不是所有的配置都需要动态更新。例如,Bean定义、JPA实体类等配置通常是不需要动态更新的,因此没有必要放在Nacos上;
  4. 隔离性:将配置放在Nacos上可能会影响其他不使用Nacos的应用。例如,如果一个应用使用Nacos进行配置管理,而另一个应用使用Spring Cloud Config,两者可能会产生冲突。

Nacos主要用于管理那些需要动态更新、共享或隔离的配置信息。对于那些不需要动态更新的配置,可以继续使用 Spring Cloud Config或其他配置管理工具。通过这种方式,可以实现配置的集中管理和动态更新,同时保持系统的灵活性和可维护性。

标签:服务,配置文件,spring,配置,nacos,Nacos,简单
From: https://blog.csdn.net/qq_54041019/article/details/140363383

相关文章

  • 消息队列Kafka简单使用(可以直接上手)
    1.消息中间件简介消息中间件(MessageMiddleware)是一种在分布式系统中用于解耦不同服务或组件的软件,它通过异步消息传递的方式来实现服务之间的通信。消息中间件允许系统组件之间通过发送和接收消息进行交互,而无需知道彼此的具体实现细节,从而提高了系统的可扩展性、灵活性和......
  • Nacos
    Nacos是一个开源的分布式服务发现和配置管理平台。它提供了服务注册、发现、配置,管理,命名空间和分组、高可用和负载均衡、安全认证等功能。帮助开发者构建微服务架构。官网:https://nacos.io/zh-cn/docs/what-is-nacos.html一.Nacos的基本概念1.服务注册与发现Nacos可以......
  • SpringMVC异常处理器,通过注解方式配置
    SpringMVC在处理器方法执行过程中出现了异常,可以采用异常处理器进行应对。一句话概括异常处理器作用:处理器方法执行过程中出现了异常,跳转到对应的视图,在视图上展示友好信息。配置ExceptionControllerpackagecom.powernode.springmvc.controller;importorg.springframewo......
  • 配置核心交换机
    目录1.配置VLAN:2.配置路由:3.开启DHCP服务:欢迎关注微信公众号:数据科学与艺术作者WX:superhe199实现连接到交换机上的PC既能访问内网又能访问外网,可以在交换机上配置VLAN和路由。以下是一个简单的配置示例:1.配置VLAN:vlan10nameInternalNetwork!vlan20......
  • naocs 作为服务注册与发现和配置中心
    下载和安装国内的软件,去官网下就行了,下载好后到其bin目录执行命令startup.cmd-mstandalone服务就会启动浏览器访问,能访问到nacos界面注册服务工程导入依赖<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-......
  • C++ //练习 14.44 编写一个简单的桌面计算器使其能处理二元运算。
    C++Primer(第5版)练习14.44练习14.44编写一个简单的桌面计算器使其能处理二元运算。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >FileName:ex14.44.cpp >Author: >Mail: >C......
  • STM32F407外设ADC配置流程及代码示例
    STM32F407外设ADC配置流程及代码示例STM32的ADC(模拟-数字转换器)是STM32微控制器系列中集成的一个关键外设,用于将模拟信号(如温度、压力、光强等传感器输出的电压或电流信号)转换为数字信号,以便微控制器能够处理和分析这些信号。ADC配置流程:时钟配置:启用GPIOF和ADC的时钟。这是......
  • 掌握构建魔法:Gradle中Groovy插件的配置秘籍
    掌握构建魔法:Gradle中Groovy插件的配置秘籍引言Gradle是一个灵活且功能强大的构建工具,它使用Groovy和Kotlin作为其构建脚本的编写语言。Groovy插件为Gradle带来了额外的便利性,使得构建脚本更加简洁和富有表现力。本文将详细介绍如何在Gradle中配置Groovy插件,并提供实际的......
  • Node.js安装与配置
    Node.js的安装与配置[Node.js官网]20.15.1版本下载链接zip包下载设置全局安装文件夹npmconfigsetprefix"F:\dev\env\node\node_global"设置全局缓存文件夹npmconfigsetcache"F:\dev\env\node\node_cache"安装cnpm到本地npminstall-gcnpm--registry=https:/......
  • ReentrantLock 简单使用
    摘自:《Java编程的逻辑》Java并发包中的提供了显式锁,它可以解决synchronized的一些限制。Java并发包中的显式锁接口和类位于包java.util.concurrent.locks下,主要接口和类有:❑锁接口Lock,主要实现类是ReentrantLock;❑读写锁接口ReadWriteLock,主要实现类是Reentran......