如何手动控制nacos注册

背景

在使用nacos作为服务注册与发现时,我们可能需要手动控制服务注册到nacos中的时机,如系统启动好之后,需要预热一段时间,加载一些缓存数据之后才允许被其它微服务访问。

解决方案

1.配置文件中关闭nacos 自动注册

spring.cloud.nacos.discovery.register-enabled=false

2.在合适的时机调用nacos的注册方法

nacosRegistration.getNacosDiscoveryProperties().setRegisterEnabled(true);
nacosAutoServiceRegistration.start();    

3.如果有必要的话,手动调用nacos下线方法

nacosAutoServiceRegistration.stop();

完整代码

import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
import com.alibaba.cloud.nacos.registry.NacosRegistration;
import org.springframework.beans.factory.annotation.Autowired;

import java.lang.reflect.Field;

public class NacosManualService {

    @Autowired(required = false)
    private NacosAutoServiceRegistration nacosAutoServiceRegistration;

    /**
     * nacos是否注册完成
     */
    private volatile boolean nacosRegistFinish = false;

    /**
     * 启动nacos注册
     */
    public void start() {
        if (nacosAutoServiceRegistration == null || nacosRegistFinish) {
            return;
        }
        try {
            Field declaredField = nacosAutoServiceRegistration.getClass().getDeclaredField("registration");
            declaredField.setAccessible(true);
            NacosRegistration nacosRegistration = (NacosRegistration) declaredField.get(nacosAutoServiceRegistration);
            declaredField.setAccessible(false);
            // 如果开启了自动注册 那么就直接返回
            if (nacosRegistration.isRegisterEnabled()) {
                return;
            }
            nacosRegistration.getNacosDiscoveryProperties().setRegisterEnabled(true);
            nacosAutoServiceRegistration.start();
            nacosRegistFinish = true;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 停止nacos注册
     */
    public void stop() {
        if (nacosAutoServiceRegistration != null) {
            nacosAutoServiceRegistration.stop();
        }
        nacosRegistFinish = false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值