SpringCloudAlibaba微服务架构搭建(三)Nacos组件之配置中心(动态取值,纯纯干货)

1、为什么用Nacos充当配置

Nacos(全称“命名和配置服务”)是一个用于服务发现、动态配置管理和服务元数据管理的开源项目,通常用于充当微服务架构中的注册中心。它由阿里巴巴集团提供开发并开源,具有以下一些优点,解释了为什么要选择使用Nacos注册中心:

  1. 服务注册与发现:Nacos 可以帮助你管理和跟踪微服务架构中各个服务的注册与发现。当新的微服务实例启动时,它可以将自己注册到 Nacos 中心,其他服务可以通过查询 Nacos 来发现和定位服务的实例。

  2. 动态配置管理:Nacos不仅可以用于服务注册与发现,还可以作为配置中心,实现动态配置的管理。这意味着你可以将配置信息集中存储在Nacos中,而不必重新部署应用程序或服务来更改配置。这在微服务架构中非常有用,因为不同的服务可能需要根据需要动态地调整配置。

  3. 服务健康检查:Nacos 具有健康检查功能,可以定期检查服务的可用性,从而在服务出现故障或不可用时及时清除不健康的实例,确保请求不会被发送到不可用的服务。

  4. 灰度发布和流量控制:Nacos 支持灰度发布,可以根据配置将部分流量引导到新版本的服务,以便阶梯验证新版本的稳定性。另外,Nacos 还支持流量控制和限制流量,帮助您更好地面管理流量和避免系统过载。

  5. 多种注册方式:Nacos 提供多种注册方式,包括 DNS、HTTP 和 gRPC,这使得它非常灵活,可以适应不同的网络架构和编程语言。

  6. 社区支持与活跃度:作为一个开源项目,Nacos拥有活跃的社区支持,持续地进行更新和改进,修复漏洞,提供新功能,从而不断变化的需求。

2、Nacos组件的诞生

故事的起点可以追溯到阿里巴巴集团内部的微服务架构发展。随着阿里巴巴规模的不断扩大,单一庞大的应用程序变得越来越难以维护和扩展。为了应对这些挑战,阿里巴巴开始采用微服务架构,将应用程序拆分为多个较小的、自治的服务。这样的架构可以带来一些更高的灵活性、可伸缩性和可维护性,但同时也带来了新的挑战。

其中一个主要挑战是服务的发现和管理。在微服务架构中,服务的数量可能会很快增加,因此需要一种机制来跟踪和管理这些服务的实例。此外,由于服务的实例可能会动态启动、停止或迁移,因此需要一种能够实时更新服务注册信息的机制。

另一个挑战是动态配置管理。在微服务架构中,不同的服务可能需要使用不同的配置参数,并且这些配置可能需要根据需要进行动态修改,而不是重新部署服务。这就需要一种集中化的配置管理系统,可以在运行时动态地修改和管理配置。

为了应对这些挑战,阿里巴巴团队开发了Nacos。Nacos不仅提供了服务发现和注册的功能,还包括动态配置管理、健康检查、灰度发布等功能。它的目标是成为一个全面的服务管理平台,帮助开发人员更轻松地构建、部署和管理微服务架构。

Nacos 的开源发展始于阿里巴巴内部,并于 2018 年对外开源。自此以后,Nacos 受到了广泛的关注和采用,成为微服务架构中注册中心和配置中心的热门选择之一。发展和改进,也反映了对微服务架构在实际应用中所面临问题的认识和解决。

SpringCloudAlibaba微服务架构搭建(三)Nacos组件之配置中心(动态取值,纯纯干货)_第1张图片

3、环境准备

Nacos 依赖 Java 环境来运行。注意要有Maven环境

  • JDK 1.8+;
  • Maven 3.2.x+。

步骤1:下载Nacos

首先,你需要从 Nacos 的官方 GitHub 仓库下载 Nacos Server 的发布版本。你可以从以下链接下载最新版本:https://github.com/alibaba/nacos/releases

选择适合您的发布版本,通常会有压缩包或安装包供下载。

步骤2:解压或安装Nacos

将下载的发布版本解压到你选择的目录中,或者按照网络的方式安装Nacos。解压后的目录中会包含Nacos Server的执行文件和配置文件。

步骤3:启动Nacos服务器

在命令行中进入到 Nacos Server 的目录,执行以下命令来启动 Nacos Server:

# Linux 或 macOS
sh startup.sh -m standalone

# Windows
startup.cmd -m standalone

这将启动一个单机模式的Nacos Server实例。

步骤4:访问Nacos控制台

一旦 Nacos Server 启动成功,你就可以在浏览器中访问 Nacos 控制台。默认情况下,Nacos 控制台的访问地址为:http://localhost:8848/nacos

你可以使用默认的用户名和密码登录,用户名为nacos,密码为nacos。登录后,你就可以开始在 Nacos 控制台上进行服务注册、配置管理等操作了。

步骤5:使用Nacos客户端

如果你想在你的应用程序中使用Nacos,你需要添加Nacos客户端库到你的项目中。根据你使用的语言和框架,你可以在项目的配置文件中配置Nacos的连接信息,然后在代码中使用Nacos客户端来进行服务发现和配置管理等操作。

3.1Nacos集成MySQL数据库


Nacos 可以使用 MySQL 数据库作为持久化存储,以保存服务注册信息、配置数据等。在使用 MySQL 作为 Nacos 的数据存储之前,需要进行一些环境搭建和配置工作。以下是使用 MySQL 数据库的 Nacos 环境搭建和配置配置步骤:

第一步:安装MySQL

首先,你需要安装MySQL数据库。你可以从MySQL官方网站下载适合你操作系统的MySQL安装包,并按照官方文档进行安装。在安装过程中,记住为MySQL设置了一个用户名和密码,这将用于连接和管理数据库。

步骤2:创建数据库

登录MySQL数据库,创建一个新的数据库用于存储Nacos的数据。您可以使用以下命令来创建数据库:

CREATE DATABASE nacos_db;

步骤3:修改Nacos配置

在 Nacos 的解压目录中,进入conf文件夹,找到application.properties文件(或者application.properties.example文件,将其复制并重命名为application.properties),然后使用文本编辑器打开它。

application.properties文件中,找到与MySQL相关的配置项,然后根据你的MySQL配置进行修改:

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_db?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos
db.password=nacos

将上述配置中的数据库连接 URL、用户名和密码替换为您实际的 MySQL 配置。

步骤4:启动Nacos服务器

在完成配置后,保存application.properties文件,并返回到Nacos解压目录。然后按照之前提供的步骤启动Nacos Server。

步骤5:访问Nacos控制台

一旦 Nacos Server 启动成功,你就可以在浏览器中访问 Nacos 控制台。默认情况下,Nacos 控制台的访问地址为:http://localhost:8848/nacos

步骤6:数据初始化

第一次启动Nacos Server时,它会自动创建所需的数据库表和初始化数据。你可以在MySQL数据库中查看到相关的表和数据。

3.2注意SQL源文件地址

SQL源文件地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql 

3.3MySQL 8.x版本大坑

在使用 MySQL 8 作为 Nacos 的数据库时可能会遇到一些问题,以下是一些可能的“大坑”以及如何避免或解决它们的一些建议:

  1. 字符集和排序规则问题:MySQL 8 默认使用了新的字符集和排序规则(utf8mb4),这可能导致与旧版本 MySQL 不兼容的情况。在配置 Nacos 使用 MySQL 8 时,确保在连接字符串中明确指定字符集和排序规则,以与Nacos所需的兼容。

    db.url.0=jdbc:mysql://localhost:3306/nacos_db?characterEncoding=utf8mb4&collation=utf8mb4_unicode_ci
    
  2. 驱动版本问题:确保使用与 MySQL 8 兼容的 JDBC 驱动。你可以从 MySQL 官方网站或 Maven 仓库下载适合 MySQL 8 的 JDBC 驱动版本,然后将其放入 Nacos 的文件夹中lib

  3. 权限问题:确保MySQL用户拥有足够的权限来创建表、插入数据等操作。可能需要为用户获取相应的权限,以便Nacos能够正常工作。

  4. 新功能问题: MySQL 8 引入了一些新功能和更改,可能会影响 Nacos 的正常运行。例如,MySQL 8 中默认启用了密码验证插件,而 Nacos 需要使用。您可以在创建caching_sha2_passwordMySQLmysql_native_password用户时指定密码验证插件修改,或者在 MySQL 配置中默认插件。

    CREATE USER 'nacos'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'your_password';
    

    另外,MySQL 8 中的一些功能更改可能会影响到 Nacos 的一些查询和操作,可能需要对 Nacos 源码进行适当修改来解决问题

4、Nacos 配置核心概念

  1. 命名空间(Namespace):命名空间是逻辑隔离的环境,每个命名空间都有自己的服务和配置数据。Nacos支持多种命名空间,可以根据环境、应用元素等划分不同的命名空间。使得不同环境下的服务和配置可以相互隔离,避免冲突和干扰。

  2. 服务(Service):服务是一个被注册到Nacos中心的实体,它代表一个具体的微服务应用程序。服务的实例可以在不同的主机和端口上运行,Nacos用于管理这些服务的注册、发现和健康状态。

  3. 实例(Instance):实例是一个特定服务的运行实体,通常是通过一个主机和端口组合。当微服务启动时,它会向Nacos注册一个实例。其他服务可以让Nacos查询这些实例的信息,从而实现服务的发现和调用。

  4. 配置(Configuration):配置是应用程序的设置和参数,可以包括数据库连接字符串、超时时间等。Nacos 提供配置中心的功能,允许您集中管理和动态修改应用程序的配置,而不需要重新部署应用。

  5. 配置集(ConfigSet):配置集是一组相关的配置项,它们可以被统一管理、查询和更新。不同的配置集可以用于不同的应用或模块,以便更好地组织和管理配置数据。

  6. 配置项(ConfigItem):配置项是配置集中的单个配置项,代表一个具体的配置项。例如,一个数据库连接字符串、存储大小等都可以作为配置项。

  7. 监听器(Listener):监听器是用于监听配置变化的组件。当某项配置发生变化时,触发相关的监听器会收到通知,从而可以触发相应的处理逻辑,实现配置的动态更新。

  8. 健康检查(Health Check):Nacos 提供健康检查,用于定期检查服务实例的健康状态。通过健康检查机制,Nacos 可以识别不健康的实例并从服务中删除,确保客户端请求只被发送到健康的实例上。

  9. 灰度发布(灰度发布):灰度发布是一个阶梯将新版本服务引入生产环境的方法,以验证新版本的稳定性。Nacos 支持基于权重和规则的灰度发布,让你将部分流量引导到新版本上,从而控制发布的风险。

 5、创建配置集与配置项

        步骤1:创建配置集和配置项

  • 浏览器,访问 Nacos 控制台:http://localhost:8848/nacos 打开
    • 登录后,在左侧导航栏选择“配置管理”。
    • 点击“配置列表”,然后点击右上角的“新建配置”。
    • 在“创建配置”页面,选择命名空间、配置数据ID、配置组等信息。
    • 在配置内容框中,输入配置项的具体键值对数据。例如
database.url=jdbc:mysql://localhost:3306/mydb
database.username=myuser
database.password=mypassword
  1. 点击“发布”按钮,完成配置集和配置项的创建。

步骤2:Java代码示例

接下来,我将为您提供一个 Java 代码示例,展示如何在应用程序中获取和使用 Nacos 中的配置项。

  1. 添加 Nacos 客户端库的依赖,可以在项目的 Maven 或 Gradle 配置中添加:

    com.alibaba.nacos
    nacos-client
    2.0.3

  1. 创建一个类来获取 Nacos 中的配置项:
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;

public class NacosConfigExample {

    public static void main(String[] args) {
        String serverAddr = "localhost";
        String dataId = "example-config";
        String group = "DEFAULT_GROUP";

        try {
            ConfigService configService = ConfigFactory.createConfigService(serverAddr);
            String content = configService.getConfig(dataId, group, 5000);
            
            System.out.println("Config Content: " + content);
        } catch (NacosException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,将serverAddr替换为您的Nacos服务器地址,dataId替换为您的配置数据ID,group替换为您的配置组。

运行上述Java代码,将从Nacos中获取指定的配置项并打印出来。

6、SrpingCloud项目接入Nacos案例

步骤1:添加依赖

在 Spring Cloud 项目的 Maven 或 Gradle 配置中,添加适用于 Nacos 配置的依赖。这里以 Maven 为例:


    org.springframework.cloud
    spring-cloud-starter-alibaba-nacos-config

步骤2:配置Nacos服务器地址

在Spring Cloud项目的配置文件(例如application.propertiesapplication.yml中,配置连接到Nacos服务器的地址:

spring.cloud.nacos.config.server-addr=localhost:8848

步骤3:创建配置文件

在 Nacos 控制台中创建配置集和配置项,如前面的说明所示。确保配置项的dataIdgroup与你的 Spring Cloud 应用程序的配置文件相对应。

步骤4:启用Nacos配置

在 Spring Cloud 项目的启动类上使用@EnableNacosConfig注解,启用 Nacos 配置:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.alibaba.nacos.NacosConfigProperties;
import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource;
import org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceRepository;
import org.springframework.cloud.alibaba.nacos.client.config.NacosConfigManager;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@SpringBootApplication
@EnableDiscoveryClient
public class YourSpringCloudApplication {

    public static void main(String[] args) {
        SpringApplication.run(YourSpringCloudApplication.class, args);
    }

    @Configuration
    public static class NacosConfiguration {

        @Bean
        public NacosConfigProperties nacosConfigProperties() {
            return new NacosConfigProperties();
        }

        @Bean
        public NacosPropertySource nacosPropertySource(NacosConfigManager nacosConfigManager,
                                                       NacosConfigProperties nacosConfigProperties) {
            return new NacosPropertySource(nacosConfigManager, nacosConfigProperties);
        }

        @Bean
        public NacosPropertySourceRepository nacosPropertySourceRepository(NacosConfigManager nacosConfigManager) {
            return new NacosPropertySourceRepository(nacosConfigManager);
        }
    }
}

步骤5:使用配置项

在你的 Spring Cloud 应用程序中,你可以像使用普通的配置一样使用 Nacos 中的配置项。例如,在你的application.propertiesapplication.yml文件中,可以使用${config.key}来引用 Nacos 配置项中的值。

spring.datasource.url=${database.url}
spring.datasource.username=${database.username}
spring.datasource.password=${database.password}

到这里Spring Cloud项目就成功地接入了Nacos配置中心,可以动态获取和应用配置项,实现了配置的集中管理和动态更新。

7、监听配置讲解(包含代码)

在Nacos中,你可以通过监听器(Listener)来监测配置项的变化,从而实现在配置发生改变时触发相应的操作。以下是关于如何监听Nacos配置变化的讲解以及一个简单的Java代码案例:

步骤1:创建配置监听器

在你的 Spring Cloud 项目中,你可以创建一个配置监听器类来处理配置变化事件。这个监听器需要实现org.springframework.cloud.alibaba.nacos.NacosConfigListener接口,并实现其receiveConfigInfo方法。

import org.springframework.cloud.alibaba.nacos.NacosConfigListener;
import org.springframework.stereotype.Component;

@Component
public class MyConfigListener implements NacosConfigListener {

    @Override
    public void receiveConfigInfo(String configInfo) {
        // 在这里处理配置变化的逻辑
        System.out.println("Received updated config: " + configInfo);
    }
}

步骤2:注册监听器

在上述的配置监听器类中,你可以处理收到的配置变化。接下来,需要在 Spring Cloud 项目中注册这个监听器,以便 Nacos 能够通知它。

import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.alibaba.nacos.NacosConfigProperties;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import java.util.concurrent.Executor;

@Configuration
public class NacosConfiguration {

    @Autowired
    private NacosConfigProperties nacosConfigProperties;

    @Autowired
    private MyConfigListener myConfigListener;

    @PostConstruct
    public void init() throws NacosException {
        nacosConfigProperties.configServiceInstance().addListener(
            nacosConfigProperties.getGroup(),
            nacosConfigProperties.getDataId(),
            myConfigListener
        );
    }
}

在上述代码中,init方法使用configServiceInstance().addListener注册了配置监听器。当配置发生变化时,receiveConfigInfo方法会被触发,你可以在这里处理配置变化的逻辑。

步骤3:测试监听器

现在,您可以在 Nacos 控制台修改配置项,然后观察您的 Spring Cloud 项目是否能够收到配置变化的通知,并执行相应的操作

8、灰度发布与配置管理

Nacos 提供了强大的灰度发布(灰度发布)功能,允许你逐步将新版本的服务或配置引入生产环境,以验证新版本的稳定性。以下是关于 Nacos 灰度发布与配置管理的讲解以及一个简单的Java代码案例:

步骤1:配置灰度发布规则

在 Nacos 控制台中,您可以创建灰度发布规则,以决定如何将新版本的实例导入生产环境。在“灰度发布”功能下,您可以创建实例分组、配置权限重等。

步骤2:Java代码示例

接下来,我将为您提供一个简单的 Java 代码示例,演示如何使用 Nacos 的灰度发布功能。

  1. 在你的 Spring Cloud 项目中,添加 Nacos 客户端库的依赖,如前面的说明。

  2. 创建一个类来获取Nacos配置项,同时添加灰度发布规则:

import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;

public class NacosGrayReleaseExample {

    public static void main(String[] args) {
        String serverAddr = "localhost";
        String dataId = "example-config";
        String group = "DEFAULT_GROUP";
        String instanceId = "your-instance-id"; // 灰度发布实例ID

        try {
            ConfigService configService = ConfigFactory.createConfigService(serverAddr);
            String content = configService.getConfig(dataId, group, 5000);
            
            System.out.println("Config Content: " + content);
            
            // 设置灰度发布实例ID
            configService.publishConfig(dataId, group, content, instanceId);
        } catch (NacosException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,instanceId是用于灰度发布的实例ID。通过设置实例ID,你可以将特定的实例引入灰度发布规则中。

步骤三:观察对比发布效果

在Nacos控制台设置好灰度发布规则后,运行上述Java代码。你可以观察到配置项被获取并灰度发布实例被设置。

期望与小结

随着微服务架构的不断发展,Nacos作为配置中心的作用也在不断扩展和深化。未来,我们可以期待以下一些可能的发展方向:

  1. 更多的配置管理功能:Nacos可能会进一步增强配置管理的功能,例如支持敏感的配置加密、配置版本管理等。

  2. 更灵活的灰度发布策略:Nacos可能会提供更灵活的灰度发布策略,让用户可以根据自身需要定制灰度发布规则。

  3. 更丰富的可视化界面:Nacos可能会提供更具观赏性、友好性的可视化界面,使用户能够更轻松地进行管理和监控配置。

  4. 更深入的集成与生态系统:Nacos可能会与更多的微服务框架和工具进行更深入的集成,以提供更完整的服务治理和配置管理解决方案。

⏳  名言警句:说会的,说对的
✨ 原创不易,还希望各位大佬支持一下
点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

你可能感兴趣的:(spring,cloud,java,微服务)