springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析

简介: 通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供

Spring Cloud/Spring Boot 集成 Nacos 做注册和配置中心及源码分析

Nacos 是一个开源的动态服务发现、配置管理和服务管理平台,专为构建云原生应用而设计。它支持几乎所有主流的微服务框架,如 Spring Cloud 和 Dubbo。本文将详细介绍如何使用 Spring Cloud 和 Spring Boot 集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行分析。

一、Spring Cloud/Spring Boot 集成 Nacos

1. 环境准备

首先,确保已经安装并启动了 Nacos 服务器。可以通过以下命令下载并启动 Nacos 服务器:

wget https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.zip
unzip nacos-server-1.4.1.zip
cd nacos/bin
sh startup.sh -m standalone
​
2. 在 Spring Boot 中集成 Nacos
2.1 添加依赖

pom.xml 中添加 Nacos 依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
​
2.2 配置 Nacos

application.yml 中配置 Nacos 连接信息:

spring:
  application:
    name: nacos-demo
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
​
2.3 启用 Nacos

在 Spring Boot 主应用类中启用 Nacos 服务注册和配置:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosDemoApplication.class, args);
    }
}
​

二、Nacos 的使用示例

1. 服务注册与发现

创建一个简单的 REST 控制器,展示服务注册与发现的功能:

@RestController
public class TestController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/services")
    public List<String> services() {
        return discoveryClient.getServices();
    }

    @GetMapping("/instances/{serviceId}")
    public List<ServiceInstance> instances(@PathVariable String serviceId) {
        return discoveryClient.getInstances(serviceId);
    }
}
​
2. 配置管理

在 Nacos 控制台中,创建一个名为 nacos-demo.yaml 的配置文件,内容如下:

test:
  message: "Hello Nacos Config"
​

在 Spring Boot 应用中,通过 @Value 注解读取配置:

@RestController
public class ConfigController {

    @Value("${test.message}")
    private String message;

    @GetMapping("/config")
    public String getConfig() {
        return message;
    }
}
​

三、Nacos 源码分析

1. Nacos 的架构

Nacos 的架构包括服务注册、配置管理和服务发现。主要组件包括:

  • Naming 模块:处理服务注册和发现。
  • Config 模块:处理配置管理。
2. Naming 模块源码分析

Naming 模块的核心类是 com.alibaba.nacos.naming.NamingService。该类负责服务注册、心跳检测和服务发现。

2.1 服务注册

服务注册通过 registerInstance 方法实现:

@Override
public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {
    String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName);
    serverProxy.registerService(groupedServiceName, instance);
}
​

serverProxy.registerService 方法负责将服务实例信息发送到 Nacos 服务器。

2.2 服务发现

服务发现通过 getAllInstances 方法实现:

@Override
public List<Instance> getAllInstances(String serviceName, String groupName) throws NacosException {
    String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName);
    return serverProxy.getAllInstances(groupedServiceName, new ArrayList<>());
}
​
3. Config 模块源码分析

Config 模块的核心类是 com.alibaba.nacos.client.config.NacosConfigService。该类负责从 Nacos 服务器获取配置信息。

3.1 配置获取

配置获取通过 getConfig 方法实现:

@Override
public String getConfig(String dataId, String group, long timeoutMs) throws NacosException {
    return worker.getServerConfig(dataId, group, timeoutMs);
}
​

worker.getServerConfig 方法负责从 Nacos 服务器获取配置数据。

3.2 配置监听

配置监听通过 addListener 方法实现:

@Override
public void addListener(String dataId, String group, Listener listener) throws NacosException {
    manager.addListener(dataId, group, listener);
}
​

manager.addListener 方法负责在配置变更时通知监听器。

四、总结

通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供

目录
相关文章
|
6月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
1051 0
|
3月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
377 3
|
4月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
679 5
|
4月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
224 0
探索Spring Boot的@Conditional注解的上下文配置
|
5月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1113 10
|
6月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
1268 1
|
9月前
|
存储 Kubernetes 安全
Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置
无论是使用 Nacos-Controller 实现配置的双向同步,还是直接在应用中接入 Nacos SDK 以获得更高级的配置管理特性,都能显著提升配置管理的灵活性、安全性和可维护性。使用 Nacos,您能够更好地管理和优化您的应用配置,从而提高系统的稳定性和可靠性。
788 49
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
10月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
11月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
3771 2