当前位置: 首页 > news >正文

Nacos机制

Nacos 配置详解

配置项作用

spring.cloud.nacos.discovery.server-addr=10.207.22.2:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
1. spring.cloud.nacos.discovery.server-addr
  • 指定 Nacos 服务注册与发现中心的地址
  • 格式:host:port
  • 本例中 Nacos 服务运行在 10.207.22.2 主机的 8848 端口
2. spring.cloud.nacos.discovery.username/password
  • 连接 Nacos 服务所需的认证凭据
  • 用于安全认证,防止未授权访问

Nacos 在程序中的作用机制

1. 服务注册过程

当 [XgQcsServerApplication](file:///Users/01450329/JavaProjects/inc-nlp-aicc-xg-qcs-server/inc-nlp-aicc-xg-qcs-server-web/src/main/java/com/sf/xg/qcs/server/web/XgQcsServerApplication.java#L15-L36) 启动时,Nacos 客户端会执行以下步骤:

应用启动 → Nacos客户端初始化 → 服务注册 → 心跳检测 → 服务发现
详细流程:
  1. 应用启动

    • Spring Boot 启动过程中加载 Nacos 相关自动配置
    • 读取 [application.properties](file:///Users/01450329/JavaProjects/inc-nlp-aicc-xg-qcs-server/inc-nlp-aicc-xg-qcs-server-web/src/main/resources/application.properties) 中的 Nacos 配置
  2. Nacos 客户端初始化

    • 创建 Nacos Discovery Client
    • 建立与 Nacos Server (10.207.22.2:8848) 的连接
    • 使用用户名/密码进行认证
  3. 服务注册

    // 自动注册信息包括:
    - 服务名:xg-qcs-server (来自 spring.application.name)
    - IP地址:应用所在服务器IP
    - 端口:8080 (来自 server.port)
    - 健康状态等元数据
    
  4. 心跳检测

    • 客户端定期向 Nacos Server 发送心跳包
    • 证明服务实例仍然存活
    • 默认每5秒发送一次心跳
  5. 服务发现

    • 应用可以查询其他注册到 Nacos 的服务
    • 实现服务间调用

2. Nacos 参与的关键位置

启动阶段

在 [XgQcsServerApplication.java](file:///Users/01450329/JavaProjects/inc-nlp-aicc-xg-qcs-server/inc-nlp-aicc-xg-qcs-server-web/src/main/java/com/sf/xg/qcs/server/web/XgQcsServerApplication.java) 启动时:

@SpringBootApplication
public class XgQcsServerApplication {public static void main(String[] args) {SpringApplication.run(XgQcsServerApplication.class, args);// Nacos 服务注册在此过程中自动完成}
}
配置加载阶段

Nacos 通过 Spring Cloud 的自动配置机制参与:

  1. NacosDiscoveryAutoConfiguration

    • 自动配置服务发现客户端
    • 创建 NacosDiscoveryClient
  2. NacosDiscoveryClientConfiguration

    • 配置服务注册相关 Bean
    • 启用心跳检测机制

3. 工作原理

服务注册原理
┌─────────────────┐    1.注册请求    ┌──────────────────┐
│   应用实例      │ ──────────────→ │   Nacos Server   │
│ (xg-qcs-server) │ ←────────────── │  (10.207.22.2)   │
└─────────────────┘    2.注册响应    └──────────────────┘││ 3.定时心跳▼
┌─────────────────┐
│  保持注册状态   │
└─────────────────┘
服务发现原理
服务消费者 → 查询Nacos → 获取服务列表 → 负载均衡 → 调用服务提供者

4. 实际应用场景

在当前项目中,Nacos 可能用于:

服务间调用
// 假设存在其他服务
@FeignClient(name = "other-service") // 服务名会注册到Nacos
public interface OtherServiceClient {@GetMapping("/api/data")String getData();
}
配置管理

虽然当前配置未显示,但 Nacos 也可用于动态配置管理:

# 可以从Nacos获取动态配置
spring.cloud.nacos.config.server-addr=10.207.22.2:8848
负载均衡

配合 Spring Cloud LoadBalancer 实现:

@RestController
public class ServiceController {@Autowiredprivate LoadBalancerClient loadBalancer;public void callService() {// 通过Nacos获取服务实例并进行负载均衡调用ServiceInstance instance = loadBalancer.choose("other-service");}
}

5. Nacos 提供的核心功能

服务注册与发现
  • 自动注册服务实例
  • 提供服务列表查询
  • 支持健康检查
配置管理
  • 集中管理应用配置
  • 支持配置的动态更新
  • 配置变更推送
元数据管理
  • 服务元数据存储
  • 路由规则配置
  • 权限管理

6. 整体架构中的作用

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   服务提供者    │    │   Nacos Server   │    │   服务消费者    │
│ (xg-qcs-server) │◄──►│  (配置&注册中心) │◄──►│   (其他服务)    │
└─────────────────┘    └──────────────────┘    └─────────────────┘▲│┌──────────────────┐│   配置管理界面   │└──────────────────┘

通过 Nacos,应用实现了服务的自动注册与发现,为微服务架构提供了基础设施支持,使得服务间调用更加灵活和可靠。

服务注册与调用机制

1. 服务注册过程

当前服务(xg-qcs-server)启动时会自动向Nacos注册:

┌─────────────────────┐
│ xg-qcs-server服务   │
│ (本机服务)          │
└──────────┬──────────┘│ 1. 启动时自动注册▼
┌─────────────────────┐
│    Nacos Server     │
│ (10.207.22.2:8848)  │
│                     │
│ ┌─────────────────┐ │
│ │ 服务注册表       │ │
│ │ - xg-qcs-server │ │
│ │ - other-service1│ │
│ │ - other-service2│ │
│ └─────────────────┘ │
└─────────────────────┘

2. 服务调用过程

本地服务可以通过Nacos调用第三方服务:

┌─────────────────────┐    ┌─────────────────────┐
│ xg-qcs-server服务   │    │  第三方服务         │
│ (本机服务)          │    │ (other-service)     │
└──────────┬──────────┘    └──────────▲──────────┘│ 2. 服务发现               │▼                          │
┌─────────────────────┐               │
│    Nacos Server     │ ──────────────┘
│ (服务注册中心)      │ 3. 获取服务地址
└──────────┬──────────┘│ 4. 负载均衡调用▼
┌─────────────────────┐
│ 第三方服务实例      │
│ (实际提供服务的机器) │
└─────────────────────┘

具体实现方式

1. 通过 OpenFeign 调用

// 声明式服务调用客户端
@FeignClient(name = "other-service") // 服务名必须在Nacos中注册
public interface OtherServiceClient {@GetMapping("/api/data")Result<String> getData();@PostMapping("/api/process")Result<Boolean> processData(@RequestBody DataRequest request);
}// 在业务代码中使用
@Service
public class BusinessService {@Autowiredprivate OtherServiceClient otherServiceClient;public void doSomething() {// 通过Feign客户端调用第三方服务Result<String> result = otherServiceClient.getData();// 处理结果...}
}

2. 通过 LoadBalancerClient 调用

@Service
public class LoadBalanceService {@Autowiredprivate LoadBalancerClient loadBalancer;@Autowiredprivate RestTemplate restTemplate;public String callOtherService() {// 通过负载均衡器获取服务实例ServiceInstance instance = loadBalancer.choose("other-service");// 构造调用URLString url = String.format("http://%s:%s/api/data", instance.getHost(), instance.getPort());// 发起HTTP调用return restTemplate.getForObject(url, String.class);}
}

3. 通过 DiscoveryClient 直接发现

@Service
public class DiscoveryService {@Autowiredprivate DiscoveryClient discoveryClient;public List<ServiceInstance> getOtherServiceInstances() {// 直接从Nacos获取服务实例列表return discoveryClient.getInstances("other-service");}public List<String> getAllServiceNames() {// 获取所有已注册的服务名称return discoveryClient.getServices();}
}

调用流程详解

1. 服务发现阶段

xg-qcs-server → Nacos Server → 获取服务列表 → 负载均衡选择 → 返回服务实例

2. 服务调用阶段

xg-qcs-server → HTTP调用 → 目标服务实例 → 处理请求 → 返回响应

负载均衡机制

Nacos 集成了负载均衡功能:

// 默认使用轮询负载均衡策略
@FeignClient(name = "other-service")
public interface OtherServiceClient { }// 可以自定义负载均衡策略
@FeignClient(name = "other-service", configuration = CustomLoadBalancerConfig.class)
public interface OtherServiceClient { }

健康检查机制

┌─────────────────────┐
│ 第三方服务实例      │
└──────────┬──────────┘│ 心跳检测▼
┌─────────────────────┐
│    Nacos Server     │
│                     │
│ 服务状态:            │
│ ✓ instance1: UP     │
│ ✓ instance2: UP     │
│ ✗ instance3: DOWN   │
└─────────────────────┘▲│ 服务发现▼
┌─────────────────────┐
│ xg-qcs-server服务   │
│ (只会获取健康实例)   │
└─────────────────────┘

实际应用示例

在当前项目中可能存在类似这样的调用:

// 调用权限服务
@FeignClient(name = "permission-service")
public interface PermissionServiceClient {@PostMapping("/api/permission/check")boolean checkPermission(@RequestBody PermissionCheckRequest request);
}// 调用数据服务
@FeignClient(name = "data-service")
public interface DataServiceClient {@GetMapping("/api/data/query")List<DataRecord> queryData(@RequestParam String condition);
}// 业务服务中使用
@Service
public class QcsBusinessService {@Autowiredprivate PermissionServiceClient permissionService;@Autowiredprivate DataServiceClient dataService;public void processData() {// 1. 检查权限(通过Nacos调用权限服务)if (permissionService.checkPermission(request)) {// 2. 获取数据(通过Nacos调用数据服务)List<DataRecord> data = dataService.queryData("some-condition");// 3. 处理业务逻辑...}}
}

总结

是的,本地服务完全可以通过Nacos实现:

  1. 服务注册:将自己的服务信息注册到Nacos
  2. 服务发现:从Nacos获取其他服务的地址信息
  3. 服务调用:通过负载均衡调用第三方服务
  4. 健康监控:Nacos自动监控服务实例的健康状态

这种方式实现了微服务架构中的松耦合,服务之间不需要知道对方的具体地址,只需要知道服务名称即可完成调用。

http://www.dtcms.com/a/318717.html

相关文章:

  • 【图像处理基石】什么是数字高程模型?如何使用数字高程模型?
  • 进阶向:AI聊天机器人(NLP+DeepSeek API)
  • 双馈和永磁风机构网型跟网型联合一次调频并入同步机电网,参与系统一次调频,虚拟惯量下垂,虚拟同步机VSG控制matlab/simulink
  • 202506 电子学会青少年等级考试机器人六级实际操作真题
  • PCB工艺-四层板制作流程(简单了解下)
  • 小实验--继电器定时开闭
  • TrustZone技术详解————这篇是AI写的包括图
  • 贝叶斯算法中的参数调优
  • RK3568下用 Qt Charts 实现曲线数据展示
  • python---getsizeof和asizeof的区别
  • 17.Linux :selinux
  • LMS/NLMS最小均值算法:双麦克风降噪
  • CentOS8.5安装19c单机告警及处理
  • 碳纳米管的原子精度制造——展望
  • 福彩双色球第2025090期篮球号码分析
  • docker启动出现Error response from daemon: Container的问题【已解决】
  • 容器化运维工具(2)Kubernetes 详细教程(含图解)
  • 开发避坑指南(18): SpringBoot环境变量配置错误:占位符解析失败解决方案
  • 【数据结构与算法-Day 12】深入浅出栈:从“后进先出”原理到数组与链表双实现
  • 奔图P2500NW打印机加碳粉方法
  • 《Transformer黑魔法Mask与Softmax、Attention的关系:一个-∞符号如何让AI学会“选择性失明“》
  • 深入理解 qRegisterMetaType<T>()
  • DAY32打卡
  • 字符输入流—read方法
  • Kotlin Native调用C curl
  • 内部类详解:Java中的嵌套艺术
  • WebView 中控制光标
  • Diamond基础1:认识Lattice器件
  • 数据结构 二叉树(1)二叉树简单了解
  • Linux学习-数据结构(栈和队列)