Java微服务之nacos的使用及说明

 更新时间:2026年02月11日 16:29:52   作者:张万森爱喝可乐  
Nacos是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,支持多种服务类型和核心功能,包括服务注册与发现、动态配置服务、动态DNS服务和元数据管理

Nacos 简介

Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。Nacos 支持几乎所有主流类型的服务发现、配置和管理,包括 Kubernetes 服务、Spring Cloud 服务、Dubbo 服务等。

Nacos 的核心功能包括服务注册与发现、动态配置服务、动态 DNS 服务和元数据管理。

Nacos 名称来源于“Naming”和“Configuration”的组合,即“命名”和“配置”。Nacos 的设计目标是简化微服务架构中的服务治理和配置管理,提供高可用、高性能和易扩展的解决方案。

Nacos 核心功能

服务注册与发现

Nacos 支持服务的自动注册与发现。服务提供者启动时向 Nacos 注册自己的服务,服务消费者通过 Nacos 获取服务提供者的地址列表,实现服务的动态调用。

动态配置服务

Nacos 提供动态配置管理功能,支持配置的动态更新和推送。配置变更时,Nacos 会实时通知订阅该配置的服务,无需重启服务即可生效。

动态 DNS 服务

Nacos 支持基于 DNS 的服务发现,可以将服务名解析为具体的 IP 地址和端口。Nacos 还支持权重路由和健康检查,确保流量的合理分配。

元数据管理

Nacos 支持服务的元数据管理,可以为服务添加自定义的标签和属性,便于服务的分类和筛选。

Nacos 安装与部署

Nacos 支持多种部署方式,包括单机模式、集群模式和 Docker 部署。以下以单机模式为例介绍 Nacos 的安装步骤。

下载 Nacos

从 Nacos 的 GitHub 仓库下载最新版本的安装包:

wget https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz

解压并启动

解压下载的安装包并启动 Nacos:

tar -xvf nacos-server-2.0.3.tar.gz
cd nacos/bin
sh startup.sh -m standalone

访问控制台

启动成功后,访问 http://localhost:8848/nacos,默认用户名和密码均为 nacos

Nacos 服务注册与发现

以下通过一个简单的 Spring Boot 项目演示如何使用 Nacos 进行服务注册与发现。

创建 Spring Boot 项目

创建一个 Spring Boot 项目,添加以下依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

配置 Nacos 服务器地址

application.yml 中配置 Nacos 服务器地址:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  application:
    name: nacos-demo

启动服务

启动 Spring Boot 项目,服务会自动注册到 Nacos。打开 Nacos 控制台,可以在“服务列表”中看到注册的服务。

服务调用

通过 RestTemplateFeign 调用其他服务:

@RestController
public class DemoController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/call")
    public String call() {
        return restTemplate.getForObject("http://nacos-demo/hello", String.class);
    }
}

Nacos 动态配置管理

Nacos 的动态配置管理功能允许在不重启服务的情况下更新配置。以下演示如何使用 Nacos 管理配置。

添加配置管理依赖

在项目中添加以下依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

创建配置文件

在 Nacos 控制台中创建一个配置,Data ID 为 nacos-demo.properties,内容如下:

demo.message=Hello Nacos

加载配置

bootstrap.yml 中配置 Nacos 服务器地址和数据 ID:

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: properties
        name: nacos-demo

使用配置

通过 @Value 注解获取配置值:

@RestController
public class ConfigController {
    @Value("${demo.message}")
    private String message;

    @GetMapping("/message")
    public String getMessage() {
        return message;
    }
}

动态更新配置

在 Nacos 控制台中修改 demo.message 的值,服务会实时获取最新的配置。

Nacos 高级特性

命名空间

Nacos 支持多命名空间,用于隔离不同环境或团队的配置和服务。可以在 application.yml 中指定命名空间:

spring:
  cloud:
    nacos:
      discovery:
        namespace: dev
      config:
        namespace: dev

配置分组

Nacos 支持配置分组,可以对配置进行逻辑隔离。可以在 bootstrap.yml 中指定分组:

spring:
  cloud:
    nacos:
      config:
        group: DEFAULT_GROUP

健康检查

Nacos 提供健康检查机制,自动剔除不健康的服务实例。可以通过以下配置调整健康检查的间隔:

spring:
  cloud:
    nacos:
      discovery:
        heartbeat-interval: 5000
        heartbeat-timeout: 15000

Nacos 集群部署

为了提高可用性,Nacos 支持集群部署。以下是集群部署的步骤。

修改集群配置

conf/cluster.conf 中配置集群节点的 IP 和端口:

192.168.1.1:8848
192.168.1.2:8848
192.168.1.3:8848

启动集群

在每个节点上启动 Nacos:

sh startup.sh

配置负载均衡

通过 Nginx 或其他负载均衡工具将请求分发到集群节点:

upstream nacos-cluster {
    server 192.168.1.1:8848;
    server 192.168.1.2:8848;
    server 192.168.1.3:8848;
}

server {
    listen 8848;
    server_name localhost;
    location / {
        proxy_pass http://nacos-cluster;
    }
}

总结

Nacos 是一个功能强大的服务发现和配置管理平台,支持动态服务注册、配置管理和健康检查。

通过本文的介绍,可以了解 Nacos 的基本功能和使用方法,并掌握其高级特性和集群部署方式。

Nacos 的易用性和高性能使其成为微服务架构中的理想选择。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决springboot中自定义JavaBean返回的json对象属性名称大写变小写问题

    解决springboot中自定义JavaBean返回的json对象属性名称大写变小写问题

    开发过程中发现查询返回的数据出现自定义的JavaBean的属性值大小写格式出现问题,导致前端无法接受到数据,目前有四种解决方法,根据大佬的经验之谈,前两种是最简单便捷的,后两种是比较通用的方法,需要的朋友可以参考下
    2023-10-10
  • java元注解@Inherited的使用详解

    java元注解@Inherited的使用详解

    这篇文章主要介绍了java元注解@Inherited的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Java中Boolean和boolean的区别详析

    Java中Boolean和boolean的区别详析

    boolean是基本数据类型Boolean是它的封装类,和其他类一样,有属性有方法,可以new,下面这篇文章主要给大家介绍了关于Java中Boolean和boolean区别的相关资料,需要的朋友可以参考下
    2022-07-07
  • JavaWeb 使用Session实现一次性验证码功能

    JavaWeb 使用Session实现一次性验证码功能

    这篇文章主要介绍了JavaWeb 使用Session实现一次性验证码功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Java多线程中的wait、notify和park、unpark的使用详解

    Java多线程中的wait、notify和park、unpark的使用详解

    这篇文章主要介绍了Java多线程中的wait、notify和park、unpark的使用详解,它们都是线程之间进行协作的手段,都属于 Object 对象的方法,必须获得此对象的锁,才能调用这几个方法,需要的朋友可以参考下
    2023-12-12
  • SpringBoot如何整合SpringDataJPA

    SpringBoot如何整合SpringDataJPA

    这篇文章主要介绍了SpringBoot整合SpringDataJPA代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 解决spring cloud zuul与nginx的域名转发问题

    解决spring cloud zuul与nginx的域名转发问题

    这篇文章主要介绍了spring cloud zuul与nginx的域名转发问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot+OCR实现PDF内容识别的示例代码

    SpringBoot+OCR实现PDF内容识别的示例代码

    在SpringBoot中,您可以结合OCR库来实现对PDF文件内容的识别和提取,本文就来介绍一下如何使用 Tesseract 和 pdf2image 对 PDF 文件进行OCR识别和提取,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Java GraphQL数据加载器批处理的实现详解

    Java GraphQL数据加载器批处理的实现详解

    GraphQL 数据加载器是优化 GraphQL API 的关键组件,旨在解决臭名昭著的 N+1 查询问题,在本中,我们将深入研究其批处理功能,感兴趣的小伙伴可以了解下
    2023-12-12
  • IDEA 2022.1.4用前注意事项

    IDEA 2022.1.4用前注意事项

    这篇文章主要介绍了IDEA 2022.1.4用前注意事项,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08

最新评论