手动注册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);
}
}
}
相关文章: