0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nacos的概念和功能

科技绿洲 来源:了不起 作者:了不起 2023-09-25 11:02 次阅读

1、Nacos简介

Nacos的概念和功能

Nacos是一个面向微服务架构的动态服务发现、配置管理和服务治理平台,它能够帮助开发人员和运维人员实现服务注册、配置管理、DNS和负载均衡等功能。

下面是一些Nacos的主要功能:

  1. 服务发现
  2. 配置管理
  3. DNS服务:Nacos支持将服务名解析为服务IP和端口号,提供了一种轻量级的服务发现方案,通过HTTP DNS协议来实现。
  4. 负载均衡
  5. 服务治理:Nacos通过服务治理功能,可以对服务实例进行管理和监控,包括实例上下线、心跳检测、健康状态等。同时,Nacos还支持路由策略、限流、熔断降级等功能,提高了服务的可用性和稳定性。

总之,Nacos是一个强大的服务注册与发现中心,提供了动态配置管理和服务治理等功能,帮助开发者轻松构建高可用、高性能的微服务架构。

2、安装使用Nacos

2.1安装Nacos

Nacos是一个基于Java开发的应用,它可以作为独立的服务运行,也可以作为嵌入式组件在Java应用程序中使用。以下是Nacos的安装和使用方法:

  1. 下载Nacos:https://github.com/alibaba/nacos/releases
  2. 安装Nacos:将下载的Nacos压缩包解压到指定目录,进入解压后的目录,运行bin目录下的startup.sh(Linux/Mac)或startup.cmd(Windows)脚本即可启动Nacos。
  3. 访问Nacos控制台:默认情况下,Nacos控制台的访问地址为 http://localhost:8848/nacos
  4. 注册服务:在Nacos控制台中,可以通过服务管理界面注册服务,输入服务名称和IP地址等信息即可完成服务注册。同时,可以设置服务的健康检查、负载均衡等属性。
  5. 获取服务:在应用程序中,可以通过Nacos提供的Java SDK或HTTP API获取已注册的服务信息。

除此之外,Nacos还提供了丰富的配置管理功能,可以帮助开发者管理应用程序的配置信息。可以通过Nacos控制台或API等方式实现配置的动态管理和实时更新。

注册服务

Nacos的服务注册和发现功能是其核心功能之一,下面是一个简单的Java示例,演示如何使用Nacos SDK注册服务:

  1. 添加依赖。在Maven项目中添加以下依赖:
< dependency >
    < groupId >com.alibaba.nacos< /groupId >
    < artifactId >nacos-client< /artifactId >
    < version >2.0.2< /version >
< /dependency >
  1. 创建Nacos服务注册实例:在Java应用程序中,可以通过以下代码创建Nacos服务注册实例,设置Nacos服务器的地址和端口号:
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;

public class NacosServiceRegistry {
    public static void main(String[] args) throws NacosException {
        String serverAddr = "localhost:8848"; // Nacos服务器的地址和端口号
        NamingService namingService = NamingFactory.createNamingService(serverAddr);
        
        // 注册服务
        namingService.registerInstance("my-service", "127.0.0.1", 8080);
        
        // 关闭Nacos服务注册实例
        namingService.shutdown();
    }
}
  1. 注册服务:通过NamingService对象的registerInstance()方法注册服务,需要指定服务的名称、IP地址和端口号等信息,例如:
namingService.registerInstance("my-service", "127.0.0.1", 8080);
  1. 关闭服务注册实例:在服务注册完成后,需要关闭NamingService对象,例
namingService.shutdown();

以上是一个简单的使用Nacos SDK注册服务的示例,当然,在实际使用中,还需要考虑服务的健康检查、负载均衡等问题。

配置服务

Nacos的配置管理功能可以帮助开发者动态管理应用程序的配置信息。下面是一个简单的Java示例,演示如何使用Nacos SDK实现配置服务的获取和监听:

  1. 添加依赖,在Maven项目中添加以下依赖:
< dependency >
    < groupId >com.alibaba.nacos< /groupId >
    < artifactId >nacos-client< /artifactId >
    < version >2.0.2< /version >
< /dependency >
  1. 创建Nacos配置服务实例:在Java应用程序中,可以通过以下代码创建Nacos配置服务实例,设置Nacos服务器的地址和端口号:
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;

public class NacosConfigService {
    public static void main(String[] args) throws NacosException {
        String serverAddr = "localhost:8848"; // Nacos服务器的地址和端口号
        String dataId = "my-config"; // 配置项的ID
        String group = "DEFAULT_GROUP"; // 配置项的分组
        
        // 创建Nacos配置服务实例
        ConfigService configService = ConfigFactory.createConfigService(serverAddr);
        
        // 获取配置
        String config = configService.getConfig(dataId, group, 5000);
        System.out.println(config);
        
        // 监听配置
        configService.addListener(dataId, group, new Listener() {
            @Override
            public void receiveConfigInfo(String config) {
                System.out.println(config);
            }
            @Override
            public Executor getExecutor() {
                return null;
            }
        });
    }
}
  1. 获取配置:通过ConfigService对象的getConfig()方法获取指定配置项的配置信息,需要指定配置项的ID和分组等信息,例如:
String dataId = "my-config";
String group = "DEFAULT_GROUP";
String config = configService.getConfig(dataId, group, 5000);
System.out.println(config);
  1. 监听配置:通过ConfigService对象的addListener()方法监听指定配置项的配置变化,需要实现Listener接口中的receiveConfigInfo()方法,例如:
configService.addListener(dataId, group, new Listener() {
    @Override
    public void receiveConfigInfo(String config) {
        System.out.println(config);
    }
    @Override
    public Executor getExecutor() {
        return null;
    }
});

以上是一个简单的使用Nacos SDK实现配置服务的示例,当然,在实际使用中,还需要考虑配置的加密、灰度发布等问题。

服务发现

  1. 添加依赖,例如在Maven项目中添加以下依赖:
< dependency >
    < groupId >com.alibaba.cloud< /groupId >
    < artifactId >spring-cloud-starter-alibaba-nacos-discovery< /artifactId >
    < version >2.2.3.RELEASE< /version >
< /dependency >
  1. 配置Nacos Server地址:在application.propertiesapplication.yml中,添加Nacos Server的地址和端口号:
spring.cloud.nacos.discovery.server-addr=localhost:8848
  1. 添加服务提供者:在Spring Boot应用程序中,添加一个服务提供者的REST接口,例如:
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, world!";
    }

}
  1. 添加服务消费者:在Spring Boot应用程序中,添加一个服务消费者的REST接口,例如:
@RestController
public class HelloConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello() {
        String url = "http://my-service/hello";
        String result = restTemplate.getForObject(url, String.class);
        return result;
    }

}

在上面的代码中,RestTemplate是Spring提供的一个用于发送HTTP请求的工具类。在hello()方法中,通过RestTemplate发送GET请求,请求URL为http://my-service/hello,其中my-service为服务提供者的服务名。

启动服务:分别启动服务提供者和服务消费者两个Spring Boot应用程序,可以看到服务消费者通过服务发现机制自动发现了服务提供者,从而可以调用服务提供者的REST接口。

需要注意的是,Nacos服务发现默认使用Ribbon进行负载均衡,因此在上面的示例中,如果服务提供者有多个实例,服务消费者将会自动进行负载均衡,请求不同的服务实例。

配置中心

确保你已经在Nacos中创建了配置,例如:

# application.yml
example:
  greeting: Hello, World!

接下来,在Spring Boot项目中添加依赖:

< dependency >
    < groupId >com.alibaba.cloud< /groupId >
    < artifactId >spring-cloud-starter-alibaba-nacos-config< /artifactId >
    < version >${nacos.config.version}< /version >
< /dependency >

在Spring Boot的启动类中添加@EnableDiscoveryClient@RefreshScope注解,它们分别启用服务发现和动态刷新配置:

javaCopy codeimport org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;

@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

最后,在application.yml中添加以下内容,告诉Spring Boot如何连接到Nacos服务器:

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # Nacos服务器地址
        namespace: your-namespace # 命名空间

现在,你可以在你的代码中使用@Value注解来注入Nacos配置中心的值了,如下所示:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @Value("${example.greeting}")
    private String greeting;

    @GetMapping("/")
    public String index() {
        return greeting;
    }

}

现在,当你更新Nacos中的配置时,Spring Boot应用程序将自动检测到更改并动态地重新加载配置。

监控中心

Nacos监控中心可以帮助你实时监控Nacos实例的运行状态,包括健康状态、配置状态、元数据状态等。下面是使用Nacos监控中心的步骤:

  1. 确保Nacos已启动并运行正常。
  2. 在Nacos控制台中,点击左侧导航栏中的“监控”按钮,进入监控中心页面。
  3. 在监控中心页面中,你可以看到以下三个部分:
    • 首页:显示Nacos实例的整体健康状态,包括Nacos实例数、实例状态、服务数量、配置数量、命名空间数量等。
    • 服务健康:显示Nacos实例中每个服务的健康状态,包括服务名称、实例数、健康实例数、不健康实例数、最近一次健康状态检查时间等。
    • 配置管理:显示Nacos实例中每个配置的状态,包括配置ID、配置Data ID、配置Group、配置类型、最近一次修改时间等。
  4. 如果你想查看更详细的监控信息,可以点击“服务健康”或“配置管理”页面中的某个服务或配置,进入详细信息页面。
  5. 在详细信息页面中,你可以看到该服务或配置的实例列表、健康状态、元数据信息等。

除了使用监控中心页面,你也可以通过Nacos提供的API接口获取监控信息。例如,你可以通过以下API接口获取服务健康状态:

GET /nacos/v1/ns/instance/health?serviceName=< serviceName >

其中,是你要查询的服务名称。该接口将返回该服务的健康状态信息。你也可以使用其他API接口获取其他监控信息,具体请参考Nacos官方文档。

3、Nacos与Eureka的区别

  • 数据一致性实现方式不同

    在Eureka 中,服务注册和发现依赖于心跳检测机制,每隔一段时间,客户端会发送心跳包维护自己的状态,并将服务状态信息告知Eureka Server。而Nacos 的服务注册与发现机制采用了更加强大的基于成熟Raft协议的Paxos算法实现读写数据一致性。

  • 功能组件的支持程度不同
    Nacos 提供了服务注册、配置管理、流量控制、DNS 服务等一系列功能的支持,用来支持微服务架构的需要;而Eureka 则只提供了服务的注册和发现功能,缺乏其他全方位的支持。

  • 开源社区活跃度不同
    相较于Eureka,Nacos 的开源社区更为活跃,且已成为了 Apache 软件基金会 Top-Level Project,开发进展速度更快。 节约开发成本

基本上,Nacos可以说是是一个功能丰富、易用性强、可扩展性好、高可用性的服务发现、配置管理和服务治理平台。对于分布式系统的开发和运维来说,Nacos是一个非常好的选择。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    103003
  • 端口
    +关注

    关注

    4

    文章

    820

    浏览量

    31597
  • 应用程序
    +关注

    关注

    37

    文章

    3136

    浏览量

    56418
  • 组件
    +关注

    关注

    1

    文章

    339

    浏览量

    17591
  • nacos
    +关注

    关注

    0

    文章

    10

    浏览量

    165
收藏 人收藏

    评论

    相关推荐

    Nacos是什么?Nacos配置管理技巧你知道吗

    Nacos 是阿里巴巴今年7月份开源的项目,如其名, Naming Configuration Service ,专注于服务发现和配置管理领域。本系列文章,将从 5W1H(What、Where
    的头像 发表于 10-29 08:53 1.4w次阅读

    支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos

    ,其核心定位是 “一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”。Nacos 有三大主要功能:服务发现与服务管理在采用以“服务(Service)”为中心的诸如微服务及云原生方式的现代
    发表于 07-05 17:35

    构建ARM64版本nacos docker镜像

    在适配过程中有大量合作伙伴用到nacos且采用容器化部署,dockerhub未提供官方镜像,因此需要在鲲鹏服务器自定义构建。构建前提:Docker已部署构建步骤:1、下载包含构建所需的脚本下载完成
    发表于 06-16 14:29

    还在为 Eureka 闭源担心?Nacos 来了

    有三大主要功能:• 任务发现与服务管理在采用以“服务 (Service)”为中心的诸如微服务及云原生方式的现代应用架构时,动态服务发现至关重要。 Nacos 同时支持基于 DNS 和基于 RPC(如 Dubbo
    发表于 08-07 15:13 130次阅读

    Nacos发布0.5.0版本,轻松玩转动态 DNS 服务

    上报模式和服务端主动探测2种健康检查模式。所以随着Nacos 0.5.0 版本的发布,我们很高兴的宣布,Nacos已经正式支持基于TTL的服务实例自动注销功能。这个功能一部分是响应社区
    发表于 12-05 16:22 96次阅读

    微服务配置中心实战:Spring + MyBatis + Druid + Nacos

    在 结合场景谈服务发现和配置 中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置中心将数据库连接信息管控起来,而在“原生
    发表于 12-29 17:09 928次阅读
    微服务配置中心实战:Spring + MyBatis + Druid + <b class='flag-5'>Nacos</b>

    Nacos 1.1.4 发布,业界率先支持 Istio MCP 协议

    Nacos是阿里巴巴开源的服务发现与配置管理项目,本次发布的1.1.4版本,主要带来的是与Istio的对接功能,使用的是Istio最新的MCP协议。本文将介绍包括这个功能在内的新版本发布的功能
    发表于 11-14 23:06 1396次阅读

    Nacos服务地址动态感知原理

    Nacos Server:Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务
    的头像 发表于 09-26 10:40 1468次阅读

    Nacos为什么这么强?Nacos注册中心的底层原理,从服务注册到服务发现

    来源:码猿技术专栏 1. Nacos介绍 2. Nacos注册中心实现原理分析 2.1 Nacos架构图 2.2 注册中心的原理 3. Nacos源码分析 3.1
    的头像 发表于 10-08 16:46 1.1w次阅读

    华为云CSE 关键特性,支持托管Nacos注册配置中心

    华为云CSE关键特性,支持托管Nacos注册配置中心 什么是Nacos Nacos是 Dynamic Naming and Configuration Service的首字母简称,相较之下,它更易
    的头像 发表于 12-29 16:23 776次阅读
    华为云CSE 关键特性,支持托管<b class='flag-5'>Nacos</b>注册配置中心

    华为云微服务引擎0停机迁移Nacos?它是这样做的

    华为云微服务引擎| 0停机迁移Nacos? “它”是这样做的 迁移云环境****场景 • 微服务规模小,使用微服务引擎CSE成本太高。 • dubbo/Nacos微服务架构改造
    的头像 发表于 12-29 20:01 535次阅读

    基于Nacos的简单动态化线程池实现

    本文以Nacos作为服务配置中心,以修改线程池核心线程数、最大线程数为例,实现一个简单的动态化线程池。
    发表于 01-06 14:14 639次阅读

    Nacos测试环境中cpu飙高的原因和解决方案

    出问题的项目是 需要连接各个不同nacos 和不同的 namespace 进行对应操作的 一个项目,对nacos的操作都是httpClient 调用的api接口,httpClient方法 没有问题,不用质疑这个
    发表于 05-12 11:20 2424次阅读
    <b class='flag-5'>Nacos</b>测试环境中cpu飙高的原因和解决方案

    Nacos、OpenFeign、Ribbon组件协调工作的原理

        Nacos 如何进行服务自动注册? Ribbon OpenFeign 总结 前几天有个大兄弟问了我一个问题,注册中心要集成SpringCloud,想实现SpringCloud的负载均衡,需要
    的头像 发表于 05-22 10:46 364次阅读
    <b class='flag-5'>Nacos</b>、OpenFeign、Ribbon组件协调工作的原理

    Nacos实现原理:SpringCloud集成Nacos的实现过程

    Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务模块。Consitency
    发表于 10-09 16:08 142次阅读
    <b class='flag-5'>Nacos</b>实现原理:SpringCloud集成<b class='flag-5'>Nacos</b>的实现过程