All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zodiac.autoconfigure.nacos.naming.NacosNamingAutoConfiguration Maven / Gradle / Ivy

package org.zodiac.autoconfigure.nacos.naming;

import java.util.Map;

import javax.annotation.PostConstruct;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.ConfigurableEnvironment;
import org.zodiac.autoconfigure.application.ApplicationInfoProperties;
import org.zodiac.autoconfigure.bootstrap.condition.ConditionalOnSpringCloudBootstrapDisabled;
import org.zodiac.autoconfigure.nacos.NacosNamingProperties;
import org.zodiac.autoconfigure.nacos.condition.ConditionalOnNacosDiscoveryEnabled;
import org.zodiac.commons.constants.Constants;
import org.zodiac.commons.util.lang.Numbers;
import org.zodiac.core.application.ApplicationInfoMetadata;
import org.zodiac.core.bootstrap.discovery.AppDiscoveryClient;
import org.zodiac.core.bootstrap.discovery.constants.DiscoveryConstants;

import com.alibaba.nacos.api.exception.NacosException;

@SpringBootConfiguration
@ConditionalOnNacosDiscoveryEnabled
@ConditionalOnSpringCloudBootstrapDisabled
@org.zodiac.nacos.client.context.annotation.discovery.EnableNacosDiscoveryClient
//@EnableConfigurationProperties(value = {NacosNamingProperties.class})
@ConditionalOnMissingBean(name = org.zodiac.nacos.base.constants.NacosBeanConstants.DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME)
@ConditionalOnClass(value = {com.alibaba.nacos.api.NacosFactory.class, org.zodiac.nacos.base.NacosAppInstance.class, org.zodiac.nacos.client.context.NacosClientContext.class})
public class NacosNamingAutoConfiguration {

    private NacosNamingProperties nacosNamingProperties;
    private ApplicationInfoProperties applicationInfoProperties;

    public NacosNamingAutoConfiguration(NacosNamingProperties nacosNamingProperties,
        ApplicationInfoProperties applicationInfoProperties) {
        this.nacosNamingProperties = nacosNamingProperties;
        this.applicationInfoProperties = applicationInfoProperties;
    }

    @Bean
    protected com.alibaba.nacos.api.naming.pojo.Instance nacosInstance(NacosNamingProperties nacosNamingProperties) {
        com.alibaba.nacos.api.naming.pojo.Instance instanceInfo = nacosNamingProperties.getRegister();
        Map metadata = instanceInfo.getMetadata();
        metadata.put(ApplicationInfoMetadata.SERVICE_ID, applicationInfoProperties.getName());
        metadata.put(ApplicationInfoMetadata.WEIGHT, String.valueOf(applicationInfoProperties.getWeight()));
        metadata.put(ApplicationInfoMetadata.MODULE, applicationInfoProperties.getModule());
        metadata.put(ApplicationInfoMetadata.CLUSTER, applicationInfoProperties.getCluster());
        metadata.put(ApplicationInfoMetadata.ZONE, applicationInfoProperties.getZone());
        metadata.put(ApplicationInfoMetadata.REGION, applicationInfoProperties.getRegion());
        metadata.put(ApplicationInfoMetadata.ENV_TYPE, applicationInfoProperties.getEnvType());
        metadata.put(ApplicationInfoMetadata.INSTANCE_ID, instanceInfo.getInstanceId());
        metadata.put(ApplicationInfoMetadata.VERSION, applicationInfoProperties.getVersion());
        metadata.put(ApplicationInfoMetadata.HOST, applicationInfoProperties.getHost());
        metadata.put(ApplicationInfoMetadata.IP_ADDRESS, applicationInfoProperties.getIpAddress());

        /*配置初始化的元数据放入实例。*/
        metadata.putAll(nacosNamingProperties.getMetadata());
        return nacosNamingProperties.getRegister();
    }

    @Bean
    @ConditionalOnMissingBean
    protected org.zodiac.nacos.client.naming.NacosNamingAutoRegister namingAutoRegister(NacosNamingProperties nacosNamingProperties,
        ConfigurableEnvironment environment, ApplicationInfoProperties applicationInfoProperties) throws NacosException {
        return new org.zodiac.nacos.client.naming.NacosNamingAutoRegister(nacosNamingProperties, environment);
    }

    @Bean
    @ConditionalOnMissingBean
    protected org.zodiac.nacos.client.naming.NacosNamingAutoDeregister namingAutoDeregister(NacosNamingProperties nacosNamingProperties,
        ServerProperties serverProperties, ApplicationInfoProperties applicationInfoProperties) {
        return new org.zodiac.nacos.client.naming.NacosNamingAutoDeregister(nacosNamingProperties,
            Numbers.getOrDefault(serverProperties.getPort(), Constants.Spring.DEFAULT_SERVER_PORT_NUMBER));
    }

    @Bean
    @ConditionalOnMissingBean
    protected org.zodiac.nacos.client.naming.NacosNamingClientService nacosNamingClientService(NacosNamingProperties nacosNamingProperties,
        ConfigurableEnvironment environment) throws com.alibaba.nacos.api.exception.NacosException {
        com.alibaba.nacos.api.naming.NamingService namingService = org.zodiac.nacos.base.util.NacosUtil.createNamingService(nacosNamingProperties, environment);
        com.alibaba.nacos.api.naming.NamingMaintainService namingMaintainService = org.zodiac.nacos.base.util.NacosUtil.createNamingMaintainService(nacosNamingProperties, environment);
        return new org.zodiac.nacos.client.naming.DefaultNacosNamingClientService(nacosNamingProperties, namingService, namingMaintainService);
    }

//    @Bean
//    protected NacosNamingServiceManager nacosNamingServiceManager(NacosNamingProperties nacosNamingProperties) {
//        return new NacosNamingServiceManager(nacosNamingProperties);
//    }

    @Bean(name = DiscoveryConstants.DISCOVERY_CLIENT_BEAN_NAME)
    protected AppDiscoveryClient discoveryClient(ApplicationInfoProperties applicationInfoProperties,
        NacosNamingProperties nacosNamingProperties, org.zodiac.nacos.client.naming.NacosNamingClientService nacosNamingClientService) {
        return new org.zodiac.nacos.client.naming.NacosAppDiscoveryClient(applicationInfoProperties, nacosNamingProperties,
            nacosNamingClientService);
    }

    @Bean(name = DiscoveryConstants.DISCOVERY_APP_INSTANCE_BEAN_NAME)
    protected org.zodiac.nacos.base.NacosAppInstance discoveryAppInstance(ApplicationInfoProperties applicationInfoProperties,
        com.alibaba.nacos.api.naming.pojo.Instance nacosInstance) {
        return new org.zodiac.nacos.base.NacosAppInstance(applicationInfoProperties, nacosNamingProperties.getRegister().getGroup(),
            nacosInstance);
    }

    @Bean
    protected org.zodiac.nacos.base.NacosAppContextLoader nacosAppContextLoader(org.zodiac.nacos.base.NacosAppInstance nacosAppInstance) {
        return new org.zodiac.nacos.base.NacosAppContextLoader(nacosAppInstance);
    }

    @PostConstruct
    public void init() {
        if (nacosNamingProperties.getClusterName() == null)
            /*默认使用应用的集群配置。*/
            nacosNamingProperties.setClusterName(applicationInfoProperties.getCluster());
        if (nacosNamingProperties.getRegister().getGroup() == null)
            /*默认使用应用的分组。*/
            nacosNamingProperties.setClusterName(applicationInfoProperties.getGroup());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy