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

com.baidu.formula.discovery.serviceregistry.FormulaAutoServiceRegistration Maven / Gradle / Ivy

package com.baidu.formula.discovery.serviceregistry;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration;
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;
import org.springframework.retry.annotation.Retryable;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

import com.baidu.formula.discovery.autoconfigure.FormulaDiscoveryProperties;

/**
 * @author Bowu Dong ([email protected])
 */
public class FormulaAutoServiceRegistration extends AbstractAutoServiceRegistration {
    private static final Logger logger = LoggerFactory.getLogger(FormulaAutoServiceRegistration.class);

    private FormulaDiscoveryProperties properties;

    private FormulaAutoRegistration registration;

    public FormulaAutoServiceRegistration(
            FormulaServiceRegistry serviceRegistry,
            AutoServiceRegistrationProperties autoServiceRegistrationProperties,
            FormulaDiscoveryProperties properties, FormulaAutoRegistration registration) {
        super(serviceRegistry, autoServiceRegistrationProperties);
        this.properties = properties;
        this.registration = registration;
    }

    @Override
    protected Object getConfiguration() {
        return properties;
    }

    @Override
    protected void deregister() {
        if (!properties.isRegister() || !properties.isDeregister()) {
            return;
        }

        super.deregister();
    }

    @Override
    protected boolean isEnabled() {
        return properties.getLifecycle().isEnabled();
    }

    @Override
    protected FormulaRegistration getRegistration() {
        if (registration.getInstance().getPort() == null && this.getPort().get() > 0) {
            registration.initializePort(getPort().get());
        }

        Assert.notNull(registration.getInstance().getPort(), "service.port has not been set");
        return registration;
    }

    @Override
    protected FormulaRegistration getManagementRegistration() {
        return registration.managementRegistration();
    }

    @Override
    protected void deregisterManagement() {
        if (!properties.isRegister() || !properties.isDeregister()) {
            return;
        }
        super.deregisterManagement();
    }

    @Override
    @Retryable(interceptor = "formulaDiscoveryRetryInterceptor")
    public void start() {
        super.start();
    }

    @Override
    protected void register() {
        if (!properties.isRegister()) {
            logger.debug("Registration disabled.");
            return;
        }
        super.register();
    }

    @Override
    protected void registerManagement() {
        if (!properties.isRegister()) {
            return;
        }
        super.registerManagement();
    }

    @Override
    protected String getAppName() {
        String appName = properties.getApp();
        if (StringUtils.hasText(appName)) {
            return appName;
        }

        appName = super.getAppName();

        if (StringUtils.hasText(appName)) {
            return appName;
        }

        return getEnvironment().getProperty("spring.cloud.config.name");
    }

    @Override
    protected boolean shouldRegisterManagement() {
        if (isCloudBms()) {
            // 云上暂不支持注册管理服务
            return false;
        }
        return super.shouldRegisterManagement();
    }

    private boolean isCloudBms() {
        String passType = System.getenv("EM_PAAS_TYPE");
        if (passType != null) {
            if ("CCE".equalsIgnoreCase(passType) || "BCC".equalsIgnoreCase(passType)) {
                return true;
            }
        }
        return false;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy