1、nacos

一、安装

\[Docker常用的容器#nacos\]

二、服务注册与发现

以在项目中添加服务发现依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在配置文件中配置Nacos注册中心的地址:

yml 复制代码
spring:  
  application:  
    name: service-order  
  profiles:  
    active: dev   # 当前环境
    include: feign # 包含feign配置  
  config:  
    import:  
      - nacos:common.yml  
      - nacos:database.yml  
  cloud:  
    nacos:  
      server-addr: 192.168.88.139:8848  
      discovery:  
        username: nacos  
        password: nacos
        # namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0  
		# group: DEFAULT_GROUP
        # register-enabled: false # 禁用注册
      config:  
        namespace: 39ee5118-3bac-42d8-91d8-58a7f2ba0c12 # 命名空间
        username: nacos  
        password: nacos  
        group: order  # 分区
  • Namespace (命名空间):用于环境隔离(如 Dev, Test, Prod)
  • Group (分组):用于区分不同的项目或模块,默认是 DEFAULT_GROUP

接着启动服务,可以在Nacos的服务列表中找到:

扩展(了解即可)

java 复制代码
/**
 * 功能: 测试 Nacos 服务注册与发现
 * 作者: 沙琪马
 * 日期: 2025/11/17 14:32
 */
@SpringBootTest
public class DiscoveryTest {

    @Resource
    private DiscoveryClient discoveryClient;  // Spring Cloud 标准接口

    @Resource
    private NacosDiscoveryClient nacosDiscoveryClient;  // Nacos 特有实现

    /**
     * 使用 Nacos 特有客户端获取服务列表及实例
     */
    @Test
    void testNacosDiscoveryClient() {
        System.out.println("=== 使用 NacosDiscoveryClient ===");
        List<String> services = nacosDiscoveryClient.getServices();
        for (String service : services) {
            System.out.println("Service: " + service);
            List<Instance> instances = nacosDiscoveryClient.getInstances(service);
            instances.forEach(instance -> 
                System.out.println("  → " + instance.getIp() + ":" + instance.getPort())
            );
        }
    }

    /**
     * 使用标准 DiscoveryClient 获取服务(推荐,解耦)
     */
    @Test
    void testDiscoveryClient() {
        System.out.println("=== 使用 DiscoveryClient(标准)===");
        List<String> services = discoveryClient.getServices();
        for (String service : services) {
            System.out.println("Service: " + service);
            List<ServiceInstance> instances = discoveryClient.getInstances(service);
            instances.forEach(instance -> 
                System.out.println("  → " + instance.getHost() + ":" + instance.getPort())
            );
        }
    }
}

三、远程调用

这里主要使用 \[2、OpenFeign] 来实现了

四、配置中心

数据隔离

  • 需求描述
    • 项目有多套环境:dev、test、prod
    • 每个微服务,同一种配置,在每套环境的值都不一样
    • 项目可以通过切换环境,加载本环境的配置
  • 难点
    • 区分多套环境
    • 区分多种微服务
    • 区分多种配置
    • 按需加载配置

总结

注册中心

  1. 引入 spring-cloud-starter-alibaba-nacos-discovery 依赖,配置Nacos地址
  2. @EnableDiscoveryClient 开启服务发现功能(默认是开启的)

扩展

  1. ={red}DiscoveryClient= 获取服务实例列表
  2. ={red}LoadBalancerClient= 负载均衡选择一个实例(需要引入 spring-cloud-starter-loadbalancer)
  3. ={red}RestTemplate= 可以发起远程调用

配置中心

  1. 引入 spring-cloud-starter-alibaba-nacos-config 依赖,配置Nacos地址
  2. 添加数据集 (data-id),使用 ={orange}spring.config.import= 导入数据集
  3. ~={orange}@Value + @RefreshScope=~ 取值 + 自动刷新
  4. @ConfigurationProperties 默认就支持自动刷新
  5. ={orange}NacosConfigManager= 监听配置变化

扩展:

配置优先级;namespace区分环境、group区分微服务、data-id区分配置 实现 数据隔离+环境切换


面试题

Nacos中的数据集 和 application.properties 有相同的配置项,哪个生效?

答案 :

以配置中心的配置为准,实现快捷的统一管理

相关推荐
qq_3692243316 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
阿米亚波16 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
caimouse16 天前
Reactos 第 10 章 网络操作 — 10.3.1 NIC驱动
网络·windows
初圣魔门首席弟子16 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
CHENG-JustDoIt16 天前
AI工具 | 爆火开源项目Odysseus AI 工作台:从项目介绍、部署情况及其使用等多方位分析指南(含详细步骤)
大数据·人工智能·windows·python·ai·开源·github
kingbal16 天前
Windows:flutter环境搭建
windows·flutter
未若君雅裁17 天前
Python 数据容器详解,list、tuple、str、set、dict 到底怎么选
windows·python·list
CodeKwang17 天前
Windows 环境 OCCT 8.0 编译构建及与 Qt6 项目集成
windows·qt·opencascade
我是伪码农17 天前
小兔鲜1-25
linux·服务器·windows
vx-Biye_Design17 天前
springboot安阳地区研学旅游服务小程序-计算机毕业设计源码12785
java·vue.js·windows·spring boot·tomcat·maven·mybatis