Talk of NacosDiscoveryAutoConfiguration nacos

sequence

In this paper, we look nacos of NacosDiscoveryAutoConfiguration

NacosDiscoveryAutoConfiguration

nacos-spring-boot-project/nacos-discovery-spring-boot-autoconfigure/src/main/java/com/alibaba/boot/nacos/discovery/autoconfigure/NacosDiscoveryAutoConfiguration.java

@ConditionalOnProperty(name = NacosDiscoveryConstants.ENABLED, matchIfMissing = true)
@ConditionalOnMissingBean(name = DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME)
@EnableNacosDiscovery
@EnableConfigurationProperties(value = NacosDiscoveryProperties.class)
@ConditionalOnClass(name = "org.springframework.boot.context.properties.bind.Binder")
public class NacosDiscoveryAutoConfiguration {

    @Bean
    public NacosDiscoveryAutoRegister discoveryAutoRegister() {
        return new NacosDiscoveryAutoRegister();
    }

}
复制代码
  • NacosDiscoveryAutoConfiguration registered NacosDiscoveryAutoRegister

NacosDiscoveryAutoRegister

nacos-spring-boot-project/nacos-discovery-spring-boot-autoconfigure/src/main/java/com/alibaba/boot/nacos/discovery/autoconfigure/NacosDiscoveryAutoRegister.java

@Component
public class NacosDiscoveryAutoRegister implements ApplicationListener<WebServerInitializedEvent> {

    private static final Logger logger = LoggerFactory.getLogger(NacosDiscoveryAutoRegister.class);

    @NacosInjected
    private NamingService namingService;

    @Autowired
    private NacosDiscoveryProperties discoveryProperties;

    @Value("${spring.application.name:spring.application.name}")
    private String applicationName;

    @Override
    public void onApplicationEvent(WebServerInitializedEvent event) {

        if (!discoveryProperties.isAutoRegister()) {
            return;
        }

        Register register = discoveryProperties.getRegister();

        if (StringUtils.isEmpty(register.getIp())) {
            register.setIp(NetUtils.localIP());
        }

        if (register.getPort() == 0) {
            register.setPort(event.getWebServer().getPort());
        }

        register.getMetadata().put("preserved.register.source", "SPRING_BOOT");

        register.setInstanceId("");
        String serviceName = StringUtils.isEmpty(register.getServiceName()) ? applicationName : register.getServiceName();

        try {
            namingService.registerInstance(serviceName, register.getGroupName(), register);
            logger.info("Finished auto register service : {}, ip : {}, port : {}", register.getServiceName(), register.getIp(), register.getPort());
        } catch (NacosException e) {
            throw new AutoRegisterException(e);
        }
    }

}
复制代码
  • NacosDiscoveryAutoRegister ApplicationListener implements the interface, it will be registered by the examples namingService.registerInstance (serviceName, register.getGroupName (), register) upon receiving WebServerInitializedEvent, if NacosException occurs will be escaped as AutoRegisterException

NacosDiscoveryAutoDeregister

nacos-spring-boot-project/nacos-discovery-spring-boot-autoconfigure/src/main/java/com/alibaba/boot/nacos/discovery/autoconfigure/NacosDiscoveryAutoDeregister.java

@Component
public class NacosDiscoveryAutoDeregister implements ApplicationListener<ContextClosedEvent> {

    private static final Logger logger = LoggerFactory.getLogger(NacosDiscoveryAutoRegister.class);

    @NacosInjected
    private NamingService namingService;

    private final NacosDiscoveryProperties discoveryProperties;
    private final WebServer webServer;

    @Value("${spring.application.name:spring.application.name}")
    private String applicationName;

    public NacosDiscoveryAutoDeregister(NacosDiscoveryProperties discoveryProperties, WebServer webServer) {
        this.discoveryProperties = discoveryProperties;
        this.webServer = webServer;
    }

    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        if (!discoveryProperties.isAutoRegister()) {
            return;
        }

        Register register = discoveryProperties.getRegister();

        if (StringUtils.isEmpty(register.getIp())) {
            register.setIp(NetUtils.localIP());
        }

        if (register.getPort() == 0) {
            register.setPort(webServer.getPort());
        }

        String serviceName = StringUtils.isEmpty(register.getServiceName()) ? applicationName : register.getServiceName();

        try {
            namingService.deregisterInstance(serviceName, register.getGroupName(), register);
            logger.info("Finished auto deregister service : {}, ip : {}, port : {}", register.getServiceName(), register.getIp(), register.getPort());
        } catch (NacosException e) {
            throw new AutoDeregisterException(e);
        }
    }
}
复制代码
  • NacosDiscoveryAutoDeregister ApplicationListener implements the interface, it will be instances cancellation by namingService.deregisterInstance (serviceName, register.getGroupName (), register) upon receiving ContextClosedEvent, if NacosException occurs it will be escaped as AutoDeregisterException

summary

  • NacosDiscoveryAutoConfiguration registered NacosDiscoveryAutoRegister
  • NacosDiscoveryAutoRegister ApplicationListener implements the interface, it will be registered by the examples namingService.registerInstance (serviceName, register.getGroupName (), register) upon receiving WebServerInitializedEvent, if NacosException occurs will be escaped as AutoRegisterException
  • NacosDiscoveryAutoDeregister ApplicationListener implements the interface, it will be instances cancellation by namingService.deregisterInstance (serviceName, register.getGroupName (), register) upon receiving ContextClosedEvent, if NacosException occurs it will be escaped as AutoDeregisterException

doc

Guess you like

Origin juejin.im/post/5d88dd04e51d453b5e465c0c