Nacos 临时和非临时实例

在 Nacos 中,有两种类型的实例:临时实例 和 非临时实例

临时实例(Ephemeral Instance)

临时实例是在 Nacos 注册的服务实例,当服务实例下线或网络中断时,Nacos 会将其从服务列表中移除。临时实例通常用于临时性的服务实例,例如临时部署的测试服务或短期运行的任务。

Java 代码方式

在注册实例时,可以通过设置实例的 ephemeral 属性为 true 来将实例注册为临时实例。Java 代码如下:

Instance instance = new Instance();
instance.setEphemeral(true);
// 设置其他实例属性
nacosNamingService.registerInstance(serviceName, instance);

配置文件方式

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: true # 默认为临时实例,所以可以不用配置

非临时实例(Non-Ephemeral Instance)

非临时实例是在 Nacos 注册的服务实例,即使服务实例下线或网络中断,Nacos 也会保留其在服务列表中的信息。非临时实例通常用于长期运行的服务实例,例如生产环境中的稳定服务。

Java 代码方式

在注册实例时,可以通过设置实例的 ephemeral 属性为 false(或不设置该属性,默认为非临时实例)来将实例注册为非临时实例。Java 代码如下:

Instance instance = new Instance();
// 设置其他实例属性
nacosNamingService.registerInstance(serviceName, instance);

配置文件方式

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例

非临时实例示例

项目依赖如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.hxstrive.nacos</groupId>
        <artifactId>springcloud_alibaba_nacos</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>nacos_spring_cloud_demo</artifactId>
    <name>nacos_spring_cloud_demo</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.9.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.12.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- Spring Boot Begin -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- @ConfigurationProperties 需要 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot End -->
        <!-- Spring Cloud Begin -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- Spring Cloud End -->
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

配置文件:

server:
  port: 8080
spring:
  profiles:
    active: prod
  application:
    name: nacos_spring_cloud_demo
  cloud:
    nacos:
      # Nacos 服务地址
      server-addr: 127.0.0.1:8848
      # Nacos 登录账号
      username: nacos
      # Nacos 登录密码
      password: nacos
      # Nacos 服务发现
      discovery:
        # 设置是否为临时实例,true-默认值,临时示例,false-表示非临时实例
        ephemeral: false
      # Nacos 服务配置
      config:
        # Nacos 配置文件扩展名
        file-extension: yaml
        # Nacos 命名空间ID
        namespace: 8719efd1-94a6-49f7-9846-2debd66f6c0f
        # Nacos 分组
        group: DEFAULT_GROUP

启动项目,查看 Nacos 服务列表信息,如下图:

Nacos 临时和非临时实例

上图中显示,当前实例为非临时实例,且健康状态为 true。当我们将服务停掉,刷新 Nacos 如下图:

Nacos 临时和非临时实例

此时,实例的健康状态变成了 false,并且实例并没有自动被删除。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号