1. Nacos 全面解析与使用指南

news/2025/2/26 1:30:40

一、什么是 Nacos

Nacos 是一个致力于帮助开发者更轻松构建云原生应用的动态服务发现、配置管理和服务管理平台

1.1 Nacos 功能

1.1.1 配置中心

配置中心是集中化管理配置的关键服务,主要作用显著:集中管理配置信息、动态更新配置、配置信息共享、配置信息安全、信息追溯。

1.1.2 注册中心

注册中心是微服务架构的核心组件,主要作用如下:服务注册、服务发现、服务健康检查、服务路由、服务监控、服务更新。

1.2 Nacos 优点

  • 简单易用、特性丰富、超高性能、高可用、超大容量。

二、Nacos 基本使用

2.1 Nacos 部署安装

2.1.1 部署方式

单机模式、集群模式、多集群模式

2.1.2 安装并启动

  1. 官网下载安装包

  2. 在mysql执行本地sql语句样例(nacos\conf\mysql-schema.sql)

  3. 修改配置,nacos后台数据存储到mysql(文件:nacos\conf\application.properties)

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysgl://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketT
    db.user=nacos devtest
    db.password=youdontknow
    
  4. 启动nacos

    startup.cmd -m standalone
    

2.2 配置中心使用 ★

Spring Boot 项目使用配置中心,实现步骤如下:

  • 添加配置中心依赖:在项目 pom.xml 文件中添加如下依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 设置 Nacos 服务端信息:在项目配置文件(application.properties)中添加如下信息:
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
#spring.cloud.nacos.config.group=
spring.config.import=nacos:nacos-config-example
  • 在nacos上填写配置信息:
    在这里插入图片描述
    在这里插入图片描述

  • 读取配置文件:在 Controller 中使用 @Value 注解和 @RefreshScope 实现配置的读取和自动更新:

java">@RestController
@RefreshScope
public class TestController {
    @Value("${myconfig}")
    private String myconfig;
    @RequestMapping("/getconfig")
    public String getMyconfig() {
        return myconfig;
    }
}

2.3 注册中心使用 ★

注册中心有两个主要角色:

  • 服务提供者(生产者):对外提供服务的微服务应用,将自身服务地址注册到注册中心,供消费者发现和调用。

  • 服务消费者(消费者):调用其他微服务的应用程序,向注册中心订阅所需服务,并基于服务提供者注册信息发起远程调用。

2.3.1 生产者实现

生产者实现步骤如下:

  • 添加 nacos-discovery 框架支持:在项目 pom.xml 文件中添加如下依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 配置 nacos 服务器端信息:在 application.yml 文件中添加如下配置:
spring:
  application:
    name: nacos-discovery-demo # Nacos 服务名(很重要,命名不用使用“_”)
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        ephemeral: false # 设置此服务为永久实例
#        group: TEST_GROUP
server:
  port: 0 # 动态端口
  • 编写调用接口:在 Controller 中编写业务接口:
java">@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private ServletWebServerApplicationContext context;
    @RequestMapping("/getnamebyid")
    public String getNameById(Integer id) throws InterruptedException {
        System.out.println("-------------------- Do Provider getNameById method."
                + LocalDateTime.now());
        Thread.sleep(1500);
        return "provider-name-" + id +
                " | port:" + context.getWebServer().getPort();
    }
}

2.3.2 消费者实现

  • 创建消费者模块

  • 配置

    spring:
      application:
        name: nacos-consumer-demo
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
            username: nacos
            password: nacos
            register-enabled: false # 消费者(不需要将此服务注册到nacos)
    server:
      port: 8080
    
  • 使用 FeignClient 调用示例:

    首先添加 Feign 依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    

    然后定义 Feign 接口:

    java">@FeignClient(name = "nacos-discovery-demo")
    public interface UserFeignClient {
        @RequestMapping("/user/getnamebyid")
        String getNameById(Integer id);
    }
    

    最后在 Controller 中使用:

    java">@RestController
    public class ConsumerFeignController {
        @Autowired
        private UserFeignClient userFeignClient;
        @RequestMapping("/consumer/getnamebyid")
        public String getNameById(Integer id) {
            return userFeignClient.getNameById(id);
        }
    }
    

http://www.niftyadmin.cn/n/5867035.html

相关文章

鸿蒙开发深入浅出04(首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影)

鸿蒙开发深入浅出04&#xff08;首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影&#xff09; 1、效果展示2、ets/pages/Home.ets3、ets/views/Home/SearchBar.ets4、ets/views/Home/NavList.ets5、ets/views/Home/TileList.ets6、ets/views/Home/PlanList.ets7、后端…

Linux放行端口

8080这个端口测试看telnet是不通的&#xff0c;您服务器内是否有对应的业务监听了这个端口呢&#xff1f;您到服务器内执行下&#xff1a; netstat -nltp |grep 8080 同时服务器内执行下&#xff1a; systemctl status firewalld iptables -nL 截图反馈下&#xff0c;我看下防火…

22、《Spring Boot消息队列:RabbitMQ延迟队列与死信队列深度解析》

Spring Boot消息队列实战&#xff1a;RabbitMQ延迟队列与死信队列深度解析 引言 在现代分布式系统中&#xff0c;消息队列承担着解耦、削峰填谷和异步通信的重要职责。本文将深入探讨Spring Boot与RabbitMQ的整合应用&#xff0c;重点解析延迟队列与死信队列的实现原理及实战…

Zabbix问题记录2--踩坑HttpRequest,header添加无效

背景 在试图尝试通过Zabbix接入DeepSeek API的时候&#xff0c;由于使用了HTTP的方式&#xff0c;所以需要使用Zabbix 自带的HttpRequest库进行请求&#xff0c;产生了下面的问题 问题 curl curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completio…

手机怎样玩电脑游戏?

如果您正在寻找一款能够实现手机远程控制电脑玩游戏的软件&#xff0c;本文推荐远程看看软件。这款软件不仅支持手机远程控制电脑&#xff0c;还具备电脑与电脑之间的多端互控功能&#xff0c;您能够随时随地畅玩游戏&#xff0c;享受无缝的游戏体验。此外&#xff0c;远程看看…

【前端】【功能函数】eachTree,封装一个通用的遍历树结构的模板

《递归遍历树结构函数 eachTree 的详解》 一、函数概述 eachTree 是一个用于递归遍历树结构数据的工具函数。在前端开发中&#xff0c;树结构数据&#xff08;如菜单树、组织结构树等&#xff09;经常会被使用&#xff0c;对树结构进行遍历并执行一些操作是常见的需求。该函数…

C++核心指导原则: 错误处理

C Core Guidelines 整理目录 哲学部分接口(Interface)部分函数部分类和类层次结构部分枚举部分资源管理部分性能部分错误处理 E: Error handling E.1: Develop an error-handling strategy early in a design 翻译: 在设计早期制定一个错误处理策略。原因: 为确保代码的健壮…

基于物联网的家庭版防疫面罩设计与实现(论文+源码)

2.1 功能设计 本次基于物联网的家庭版防疫面罩设计采用单片机作为主控核心&#xff0c;利用温度检测模块、红外检测模块、风扇控制器模块、紫外线消毒模块、报警提示模块构成整个系统。在系统设计上&#xff0c;主要包括以下功能&#xff1a; &#xff08;1&#xff09;系统具…