# 临时实例

临时实例与持久实例的实例存储的位置与健康检测机制是不同的。

临时实例:默认情况。服务实例仅会注册在Nacos内存,不会持久化到 Nacos 磁盘。其健康检测机制为Client模式,即Client主动向Server上报其健康状态。

默认心跳间隔为5秒。在15秒内Server未收到Client心跳,则会将其标记为“不健康”状态;在30秒内若收到了Client心跳,则重新恢复“健康”状态,否则该实例将从Server端内存清除。

# 持久实例

持久实例:服务实例不仅会注册到 Nacos 内存,同时也会被持久化到 Nacos 磁盘

其健康检测机制为Server模式,即Server会主动去检测Client的健康状态,默认每20秒检测一次。

健康检测失败后服务实例会被标记为“不健康”状态,但不会被清除,因为其是持久化在磁盘的。

# 注册为持久实例

配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        # 开启持久实例
        ephemeral: false
  application:
    name: provider-8081

如果一开始的服务,注册为临时实例,那么在配置为持久实例会出现错误


com.alibaba.nacos.api.exception.NacosException: caused: errCode: 400, errMsg: Current service DEFAULT_GROUP@@provider-8081 is ephemeral service, can't register persistent instance. ;

解决办法

  1. 更改application.name
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        # 开启持久实例
        ephemeral: false
  application:
    name: provider2-8081
  1. 在本地文件中,找到服务的文件(win),将其删除 C:\Users\GaoLiang\nacos\naming\public

# 删除持久实例

一旦将服务改为持久实例,通过 Nacos 可视化页面的删除按钮,是无法删除的,需要通过提供的 api 才能删除,需要先注销,才能删除 (opens new window)

注销调用示例

http://124.222.183.73:8848/nacos/v1/ns/instance?serviceName=provider-8081&ip=124.222.183.73&port=8848