【微服务】微服务组件之Nacos注册中心和配置中心的使用

背景:

在当前的软件架构领域,微服务架构凭借其高度的可扩展性、灵活性和可维护性,已成为企业构建复杂应用的首选。微服务架构通过将应用拆分成一系列小的、独立的服务,实现了服务的解耦和复用,从而提高了应用的可扩展性和灵活性。然而,随着微服务数量的不断增加,服务的注册、发现、配置和管理等问题也逐渐凸显出来。

正是在这样的背景下,Nacos应运而生。Nacos是一个由阿里巴巴开源的、面向云原生的动态服务发现、配置和服务管理平台。它提供了服务注册与发现、动态配置管理、服务和配置的实时监听等功能,帮助开发者更加轻松地构建和管理微服务架构。

文章目录

    • 1.Nacos简介
      • [1.1 Nacos的定义与背景](#1.1 Nacos的定义与背景)
      • [1.2 Nacos在微服务架构中的角色](#1.2 Nacos在微服务架构中的角色)
    • 2.Nacos的核心功能
      • [2.1 动态服务注册与发现](#2.1 动态服务注册与发现)
      • [2.2 动态配置管理](#2.2 动态配置管理)
      • [2.3 服务健康监测](#2.3 服务健康监测)
      • [2.4 集群与命名空间管理](#2.4 集群与命名空间管理)
    • 3.Nacos的安装与部署
      • [3.1 单机模式部署](#3.1 单机模式部署)
      • [3.2 集群模式部署](#3.2 集群模式部署)
    • 4.Nacos的专业使用示例
      • [4.1 服务注册与发现示例](#4.1 服务注册与发现示例)
        • [4.1.1 配置文件](#4.1.1 配置文件)
        • [4.1.2 代码示例](#4.1.2 代码示例)
      • [4.2 动态配置管理-Nacos实现配置热更新示例](#4.2 动态配置管理-Nacos实现配置热更新示例)
        • [4.2.1 配置文件](#4.2.1 配置文件)
        • 4.2.1.1概论
        • [4.2.2 代码示例](#4.2.2 代码示例)
    • 6.结论

1.Nacos简介

1.1 Nacos的定义与背景

Nacos(Dynamic Naming and Configuration

Service)是阿里巴巴开源的一个动态服务发现和配置管理平台,专为微服务架构和云原生应用设计。它旨在简化服务注册、配置管理和服务治理的复杂性,通过提供一套简单易用的特性集,帮助开发者快速构建、部署和管理微服务应用。

1.2 Nacos在微服务架构中的角色

在微服务架构中,Nacos扮演着至关重要的角色。作为服务注册中心,它允许服务实例动态地注册和注销,服务消费者通过Nacos查询可用的服务实例列表,并进行负载均衡调用。同时,Nacos还提供了动态配置管理功能,支持配置的集中存储、版本控制和动态刷新,极大地提高了配置的灵活性和效率。

2.Nacos的核心功能

2.1 动态服务注册与发现

Nacos支持基于DNS和基于HTTP的服务发现机制。服务实例在启动时向Nacos注册中心注册自己的信息(如服务名称、IP地址、端口号等),并在关闭时注销。服务消费者通过Nacos查询可用的服务实例列表,并根据负载均衡策略调用服务。

2.2 动态配置管理

Nacos提供了一个中心化的配置管理平台,支持配置的集中存储、版本控制和动态刷新。应用启动时从Nacos拉取配置信息,并在配置变更时自动刷新,无需重启应用。

2.3 服务健康监测

Nacos通过心跳检测等方式实时监控服务实例的健康状态。当服务实例不健康时,Nacos会将其从服务列表中剔除,防止服务消费者调用不健康的服务实例。

Nacos目前SDK维护了两个分支的版本(1.x、2.x),这两个版本心跳机制的实现不一样。其中1.x版本的SDK通过http协议来定时向服务端发送心跳维持自己的健康状态,2.x版本的SDK则通过grpc自身的心跳机制来保活,当Nacos服务端接受不到服务实例的心跳,会认为实例下线。如下图:

2.4 集群与命名空间管理

Nacos支持集群部署模式,以提高系统的可用性和扩展性。通过集群部署,Nacos可以实现数据的高可用和负载均衡。此外,Nacos还提供了命名空间(Namespace)功能,以实现不同环境(如开发、测试、生产等)的配置隔离和服务管理

3.Nacos的安装与部署

3.1 单机模式部署

单机模式部署适用于测试和开发环境。下载Nacos的发行版后,解压并修改配置文件(如conf/application.properties),配置数据源(可选)和端口号等参数。然后启动Nacos服务即可。

  • 下载 Nacos 发行版并解压。
  • 修改 conf/application.properties 文件中的配置,如服务端口和数据存储位置。
  • 运行 startup.sh -m standalone 启动 Nacos 服务。

3.2 集群模式部署

集群模式部署涉及多个 Nacos 节点的配置和启动,需要配置 cluster.conf 文件指定集群中各个节点的 IP 和端口,并确保各节点之间网络互通。然后分别启动各个节点,形成集群。

4.Nacos的专业使用示例

4.1 服务注册与发现示例

4.1.1 配置文件

在src/main/resources目录下创建application.properties文件,配置Nacos服务器的地址和服务的基本信息:

properties

java 复制代码
spring.application.name=user-service  
server.port=8080  
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

或者

application.yml

yaml 复制代码
spring:  
  application:  
    name: user-service  
  cloud:  
    nacos:  
      discovery:  
        server-addr: 127.0.0.1:8848  
server:  
  port: 8080
4.1.2 代码示例

创建一个Spring Boot应用,并使用@EnableDiscoveryClient注解启用服务注册与发现功能:

java 复制代码
@SpringBootApplication  
@EnableDiscoveryClient  
public class UserServiceApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(UserServiceApplication.class, args);  
        }  

  }

4.2 动态配置管理-Nacos实现配置热更新示例

4.2.1 配置文件
yaml 复制代码
spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # Nacos服务器地址
        namespace: your-namespace-id # 命名空间ID
        group: DEFAULT_GROUP # 配置分组
        data-id: your-data-id # 配置的Data ID

在Nacos控制台创建配置类

介绍一下:Naocs界面中的一些概念及使用方式

Nacos通过命名空间(Namespace)+分组(Group)+应用(Data ID或Name)确定一个唯一的服务实例。它们的范围由大到小依次是:命名空间、分组、服务。

4.2.1.1概论


命名空间(Namespace)

    用于租户粒度的配置隔离。不同的命名空间下可以存在相同的 Group 或 Data ID 的配置。

    使用场景:一般用Namespace来实现环境隔离,用于实现不同环境(如开发、测试、生产等)或不同应用程序间配置和服务信息隔离    例如:测试环境和生产环境的隔离。

配置分组(Group) 也叫配置组

    分组(Group)是次于命名空间的一种隔离概念。

    使用场景:区分项目。(用于多个项目共用Nacos的情况)  当不同的项目应用或组件使用了相同类型的配置时,可以通过配置分组来区分它们,以便更好地管理和维护。

配置集 ID(Data ID)

     Data ID一般用于区分应用,一般用应用名来作为它的值。  每个Data ID对应一个具体的配置信息,如数据库连接信息、消息队列配置等。通过Data ID,可以轻松地在Nacos中查找、获取和更新配置信息

配置集

    一组配置项的集合称为配置集。一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

下面演示一下Nacos控制台的操作:

默认命名空间:

下面我们来新建两个环境的命名空间 dev 和 test

,以配置另外两个环境的配置文件


配置列表中就出现了两个 tab

我们把原来的配置克隆到新的命名空间下

然后需要我们在 bootstrap.yml 中配置一下使用的命名空间

yaml 复制代码
server:
  port: 9201

# Spring
spring:
  application:
    # 应用名称
    name: cloud-nacos-provider
  profiles:
    # 环境配置
    active: test
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        # 服务注册到哪个命名空间
        namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 服务从哪个命名空间拉取配置
        namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
        - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

增加 spring.cloud.nacos.discovery.namespace 和 spring.cloud.nacos.config.namespace 配置,值就是我们控制台创建时候生成的 命名空间id

4.2.2 代码示例
java 复制代码
@Component
@ConfigurationProperties(prefix = "nacos")
public class ExampleProperties {
    private String config;

    // getters and setters
    public String getConfig() {
        return config;
    }

    public void setConfig(String config) {
        this.config= config;
    }
}

使用配置
在你的服务中注入这个配置类,并使用它:

java 复制代码
@Service
@RefreshScope
public class ExampleService {
    private final ExampleProperties exampleProperties;

    @Autowired
    public ExampleService(ExampleProperties exampleProperties) {
        this.exampleProperties = exampleProperties;
    }

    public String getConfig() {
        return exampleProperties.getConfig();
    }
}

为了能够在Nacos中的配置发生变化时自动更新Spring环境中的配置,不需要做任何额外的编码工作,因为Spring Cloud

Alibaba Nacos Config已经为你处理了这部分逻辑。

当在Nacos配置管理界面中修改了对应的配置并发布后,Spring

Cloud应用会自动检测到这些变化并重新加载配置。@ConfigurationProperties注解的配置类会自动更新其属性值。

6.结论

Nacos作为一款功能强大的服务发现和配置管理平台,凭借其动态服务发现、配置管理、服务健康检查以及动态DNS服务等核心功能,为微服务架构下的应用提供了极大的便利和灵活性。其高可用、易扩展的设计,以及与Spring

Cloud等主流微服务框架的无缝集成,使得Nacos成为构建现代云原生应用的理想选择。无论是对于初创企业还是大型企业,Nacos都能提供稳定可靠的服务

相关推荐
W Y41 分钟前
【架构-37】Spark和Flink
架构·flink·spark
Gemini19951 小时前
分布式和微服务的区别
分布式·微服务·架构
Dann Hiroaki9 小时前
GPU架构概述
架构
茶馆大橘10 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
coding侠客10 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
lipviolet11 小时前
架构系列---高并发
架构
Phodal11 小时前
架构赋能 AI:知识工程推动下的软件架构数字化
人工智能·架构
lexusv8ls600h12 小时前
微服务设计模式 - 网关路由模式(Gateway Routing Pattern)
spring boot·微服务·设计模式
曹申阳14 小时前
2. JVM的架构模型和生命周期
jvm·架构
车载诊断技术15 小时前
电子电气架构 --- 整车控制系统
网络·架构·汽车·soa·电子电器架构