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

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

package com.baidu.formula.discovery.serviceregistry;

import com.baidu.discovery.client.FormulaClient;
import com.baidu.discovery.client.model.Instance;
import com.baidu.formula.discovery.autoconfigure.FormulaDiscoveryProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.boot.actuate.health.Status;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.util.ReflectionUtils;

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

    private final FormulaClient client;

    private final FormulaDiscoveryProperties properties;

    public FormulaServiceRegistry(FormulaClient formulaClient, FormulaDiscoveryProperties properties) {
        this.client = formulaClient;
        this.properties = properties;
    }

    @Override
    public void register(FormulaRegistration registration) {
        logger.info("Registering service with Tianlu: {}", registration.getInstance());
        try {
            client.registerInstance(registration.getInstance());
        } catch (Exception e) {
            if (properties.isFailFast()) {
                logger.error("Error Registering service with Tianlu: {}", registration.getInstance(), e);
                ReflectionUtils.rethrowRuntimeException(e);
            }
            logger.warn("Fail-fast is false. Error registering service with Tianlu: {}",
                    registration.getInstance(), e);
        }
    }

    @Override
    public void deregister(FormulaRegistration registration) {
        logger.info("Deregistering service with Tianlu: {}", registration.getInstance());

        client.removeInstance(registration.getInstance());
    }


    @Override
    public void close() {

    }

    @Override
    public void setStatus(FormulaRegistration registration, String status) {
        if (status.equalsIgnoreCase(Status.OUT_OF_SERVICE.getCode())) {
            Instance instance = new Instance();
            BeanUtils.copyProperties(registration.getInstance(), instance);
            instance.setStatus(0);
            client.updateInstance(instance);
        } else if (status.equalsIgnoreCase(Status.UP.getCode())) {
            Instance instance = new Instance();
            BeanUtils.copyProperties(registration.getInstance(), instance);
            instance.setStatus(1);
            client.updateInstance(instance);
        } else {
            throw new IllegalArgumentException("Unknown status: " + status);
        }
    }

    @Override
    public Object getStatus(FormulaRegistration registration) {
        String serviceId = registration.getServiceId();
        Instance instance = client.getInstance(serviceId, registration.getInstance().getInstanceId());
        String status;
        switch (instance.getStatus()) {
            case 1:
                //
                status = Status.UP.getCode();
                break;
            default:
                //
                status = Status.OUT_OF_SERVICE.getCode();
                break;
        }
        return status;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy