手动注册nacos服务实例

手动注册nacos一个永久服务实例 概念 临时实例和持久化实例最大的区别是健康检查的方式:临时实例使用客户端主动上报的健康检查模式,而持久化实例使用服务端反向探测的模式。 临时实例是可以自动删除非健康实例的,并且当所有的临时实例被删除之后,Nacos 中的服务也会被自动删除 对于持久化实例来说,就没

手动注册nacos一个永久服务实例

概念

临时实例和持久化实例最大的区别是健康检查的方式:临时实例使用客户端主动上报的健康检查模式,而持久化实例使用服务端反向探测的模式

临时实例是可以自动删除非健康实例的,并且当所有的临时实例被删除之后,Nacos 中的服务也会被自动删除

对于持久化实例来说,就没有那么简单了,因此持久化实例即使是非健康状态,也不会自动删除实例和服务,这个时候就需要我们手动删除服务了。

接口方式

nacos管理-注册服务实例(post)

http://127.0.0.1:9010/nacos/v1/ns/instance?serviceName=服务名&ip=ip&port=端口&ephemeral=flase

nacos管理-注销服务实例(delete)

http://127.0.0.1:9010/nacos/v1/ns/instance?serviceName=服务名&ip=ip&port=端口&ephemeral=flase

| serviceName | String | | 服务名 |
| ————- | ——— | —— | ————– |
| ip | String | | IP地址 |
| port | int | | 端口号 |
| ephemeral | boolean | 否 | 是否为临时实例 |

ephemeral为false,不进行心跳检测。

代码方式

import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.client.naming.NacosNamingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ManualRegistration {

    @Value("${bps.ip}")
    private String serviceName;

    @Value("${bps.ip}")
    private String Ip;

    @Value("${bps.host}")
    private int Host;

    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;
    @Autowired
    private NacosServiceManager nacosServiceManager;

    // 利用nacosServiceManager和nacosDiscoveryProperties获取namingService。注解注入namingService会报错
    @PostConstruct
    public void registerInstance() throws NacosException {
        NamingService namingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
        // 手动注册服务实例到 Nacos
        try {
            namingService.registerInstance(serviceName, Ip, Host, String.valueOf(false)); // 最后一个参数设置为 false,表示不进行心跳检测
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
    }
}

相关文章:

Nacos 中服务删除不了,怎么办? - 知乎 (zhihu.com)

Open API 指南 | Nacos

LICENSED UNDER CC BY-NC-SA 4.0
Comment