
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