[SCB-2799]change registry model definition
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/BootStrapProperties.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/BootStrapProperties.java
index 2e88297..7c18f58 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/BootStrapProperties.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/BootStrapProperties.java
@@ -82,6 +82,8 @@
public static final String CONFIG_SERVICE_PATHS = "servicecomb.service.paths";
+ public static final String CONFIG_SERVICE_ALIAS = "servicecomb.service.alias";
+
// service instance definition keys of new version
public static final String CONFIG_SERVICE_INSTANCE_PROPERTIES = "servicecomb.instance.properties";
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java
index be59114..ecdee35 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java
@@ -28,7 +28,6 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
-import com.google.common.annotations.VisibleForTesting;
import org.apache.http.client.utils.URIBuilder;
import org.apache.servicecomb.foundation.common.event.EnableExceptionPropagation;
import org.apache.servicecomb.foundation.common.event.EventManager;
@@ -42,6 +41,7 @@
import org.apache.servicecomb.registry.api.event.MicroserviceInstanceRegisteredEvent;
import org.apache.servicecomb.registry.api.registry.BasePath;
import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
import org.apache.servicecomb.registry.consumer.MicroserviceManager;
@@ -50,7 +50,9 @@
import org.apache.servicecomb.registry.swagger.SwaggerLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.core.env.Environment;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.eventbus.Subscribe;
import com.netflix.config.DynamicPropertyFactory;
@@ -70,14 +72,17 @@
private final List<Registration> registrationList = new ArrayList<>();
- private Registration primary;
+ private Microservice microservice;
+
+ private final MicroserviceFactory microserviceFactory = new MicroserviceFactory();
+
+ private Environment environment;
private RegistrationManager() {
SPIServiceUtils.getOrLoadSortedService(Registration.class)
.stream()
.filter((SPIEnabled::enabled))
.forEach(registrationList::add);
- initPrimary();
}
@VisibleForTesting
@@ -86,24 +91,15 @@
}
public MicroserviceInstance getMicroserviceInstance() {
- return primary.getMicroserviceInstance();
+ return this.microservice.getInstance();
}
public Microservice getMicroservice() {
- assertPrimaryNotNull();
- return primary.getMicroservice();
- }
-
- private void assertPrimaryNotNull() {
- if (primary == null) {
- throw new NullPointerException("At least one Registration implementation configured. Missed"
- + " to include dependency ? e.g. <artifactId>registry-service-center</artifactId>");
- }
+ return this.microservice;
}
public String getAppId() {
- assertPrimaryNotNull();
- return primary.getAppId();
+ return microservice.getAppId();
}
public SwaggerLoader getSwaggerLoader() {
@@ -140,22 +136,15 @@
registrationList.forEach(LifeCycle::run);
}
- public void init() {
+ public void init(Environment environment) {
+ this.environment = environment;
+ this.microservice = this.microserviceFactory.create(this.environment);
+
BeanUtils.addBeans(Registration.class, registrationList);
- initPrimary();
registrationList.forEach(LifeCycle::init);
}
- private void initPrimary() {
- if (registrationList.isEmpty()) {
- LOGGER.warn("No registration is enabled. Fix this if only in unit tests.");
- primary = null;
- } else {
- primary = registrationList.get(0);
- }
- }
-
/**
* <p>
* Register a third party service if not registered before, and set it's instances into
@@ -308,7 +297,6 @@
.getHostAddress();
}
-
return new IpPort(publicAddressSetting, publishPort);
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java
index bd77191..8241d23 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java
@@ -61,6 +61,10 @@
private String description;
+ @Deprecated
+ /**
+ * No meaning in real world.
+ */
private String level;
private List<String> schemas = new ArrayList<>();
@@ -68,6 +72,10 @@
@JsonIgnore
private final Map<String, String> schemaMap = new HashMap<>();
+ @Deprecated
+ /**
+ * Can use registered Open API information instead.
+ */
private List<BasePath> paths = new ArrayList<>();
private MicroserviceStatus status = MicroserviceStatus.UP;
@@ -164,10 +172,12 @@
this.description = description;
}
+ @Deprecated
public String getLevel() {
return level;
}
+ @Deprecated
public void setLevel(String level) {
this.level = level;
}
@@ -211,10 +221,12 @@
return sb.toString();
}
+ @Deprecated
public List<BasePath> getPaths() {
return paths;
}
+ @Deprecated
public void setPaths(List<BasePath> paths) {
this.paths = paths;
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
index 16b7147..e2276f3 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
@@ -16,72 +16,47 @@
*/
package org.apache.servicecomb.registry.api.registry;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.APP_MAPPING;
import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_DEFAULT_REGISTER_BY;
import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_FRAMEWORK_DEFAULT_NAME;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.SERVICE_MAPPING;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.VERSION_MAPPING;
import java.util.Map;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.EnvironmentConfiguration;
-import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.config.BootStrapProperties;
-import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.registry.config.ConfigurePropertyUtils;
-import org.apache.servicecomb.registry.config.MicroservicePropertiesLoader;
import org.apache.servicecomb.foundation.common.Version;
+import org.apache.servicecomb.registry.config.MicroservicePropertiesLoader;
+import org.springframework.core.env.Environment;
public class MicroserviceFactory {
- public Microservice create() {
- return create(ConfigUtil.createLocalConfig());
- }
-
- public Microservice create(Configuration configuration) {
- Microservice microservice = createMicroserviceFromConfiguration(configuration);
- microservice.setInstance(MicroserviceInstance.createFromDefinition(configuration));
+ public Microservice create(Environment environment) {
+ Microservice microservice = createMicroserviceFromConfiguration(environment);
+ microservice.setInstance(MicroserviceInstance.createFromDefinition(environment));
return microservice;
}
- private Microservice createMicroserviceFromConfiguration(Configuration configuration) {
+ private Microservice createMicroserviceFromConfiguration(Environment environment) {
Microservice microservice = new Microservice();
- EnvironmentConfiguration envConfig = new EnvironmentConfiguration();
- if (!StringUtils.isEmpty(envConfig.getString(APP_MAPPING)) &&
- !StringUtils.isEmpty(envConfig.getString(envConfig.getString(APP_MAPPING)))) {
- microservice.setAppId(envConfig.getString(envConfig.getString(APP_MAPPING)));
- } else {
- microservice.setAppId(BootStrapProperties.readApplication(configuration));
- }
- if (!StringUtils.isEmpty(envConfig.getString(SERVICE_MAPPING)) &&
- !StringUtils.isEmpty(envConfig.getString(envConfig.getString(SERVICE_MAPPING)))) {
- microservice.setServiceName(envConfig.getString(envConfig.getString(SERVICE_MAPPING)));
- } else {
- microservice.setServiceName(BootStrapProperties.readServiceName(configuration));
- }
- String version;
- if (!StringUtils.isEmpty(envConfig.getString(VERSION_MAPPING)) &&
- !StringUtils.isEmpty(envConfig.getString(envConfig.getString(VERSION_MAPPING)))) {
- version = envConfig.getString(envConfig.getString(VERSION_MAPPING));
- } else {
- version = BootStrapProperties.readServiceVersion(configuration);
- }
+ microservice.setEnvironment(environment.getProperty(BootStrapProperties.CONFIG_SERVICE_ENVIRONMENT,
+ BootStrapProperties.DEFAULT_MICROSERVICE_ENVIRONMENT));
+ microservice.setAppId(environment.getProperty(BootStrapProperties.CONFIG_SERVICE_APPLICATION,
+ BootStrapProperties.DEFAULT_APPLICATION));
+ microservice.setServiceName(environment.getProperty(BootStrapProperties.CONFIG_SERVICE_NAME,
+ BootStrapProperties.DEFAULT_MICROSERVICE_NAME));
+ microservice.setVersion(environment.getProperty(BootStrapProperties.CONFIG_SERVICE_VERSION,
+ BootStrapProperties.DEFAULT_MICROSERVICE_VERSION));
// just check version format
- new Version(version);
- microservice.setVersion(version);
+ new Version(microservice.getVersion());
- microservice.setDescription(BootStrapProperties.readServiceDescription(configuration));
- microservice.setLevel(BootStrapProperties.readServiceRole(configuration));
- microservice.setPaths(ConfigurePropertyUtils.getMicroservicePaths(configuration));
- Map<String, String> propertiesMap = MicroservicePropertiesLoader.INSTANCE.loadProperties(configuration);
+ microservice.setDescription(environment.getProperty(BootStrapProperties.CONFIG_SERVICE_DESCRIPTION));
+ Map<String, String> propertiesMap = MicroservicePropertiesLoader.INSTANCE.loadProperties(environment);
microservice.setProperties(propertiesMap);
- microservice.setEnvironment(BootStrapProperties.readServiceEnvironment(configuration));
// set alias name when allow cross app
if (microservice.allowCrossApp()) {
microservice.setAlias(Microservice.generateAbsoluteMicroserviceName(microservice.getAppId(),
microservice.getServiceName()));
+ } else {
+ microservice.setAlias(environment.getProperty(BootStrapProperties.CONFIG_SERVICE_ALIAS));
}
microservice.setFramework(createFramework());
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
index 954fe04..1807597 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
@@ -22,13 +22,11 @@
import java.util.List;
import java.util.Map;
-import org.apache.commons.configuration.Configuration;
import org.apache.servicecomb.config.BootStrapProperties;
import org.apache.servicecomb.registry.config.InstancePropertiesLoader;
-import org.apache.servicecomb.registry.definition.DefinitionConst;
+import org.springframework.core.env.Environment;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.netflix.config.DynamicPropertyFactory;
/**
* Created by on 2016/12/5.
@@ -51,12 +49,24 @@
private Map<String, String> properties = new HashMap<>(); // reserved key list: region|az|stage|group
+ @Deprecated
+ /**
+ * This property is registry implementation specific.
+ */
private HealthCheck healthCheck;
+ @Deprecated
+ /**
+ * Not meaning full property.
+ */
private String stage;
private DataCenterInfo dataCenterInfo;
+ @Deprecated
+ /**
+ * Not meaning full property.
+ */
private String timestamp;
@Override
@@ -69,10 +79,12 @@
return sb.toString();
}
+ @Deprecated
public String getTimestamp() {
return timestamp;
}
+ @Deprecated
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
@@ -174,34 +186,25 @@
this.dataCenterInfo = dataCenterInfo;
}
- // Some properties of microservice instance are dynamic changed, not cover them all now.
- public static MicroserviceInstance createFromDefinition(Configuration configuration) {
+ public static MicroserviceInstance createFromDefinition(Environment environment) {
MicroserviceInstance microserviceInstance = new MicroserviceInstance();
- // default hard coded values
- microserviceInstance.setStage(DefinitionConst.DEFAULT_STAGE);
microserviceInstance.setStatus(MicroserviceInstanceStatus
- .valueOf(BootStrapProperties.readServiceInstanceInitialStatus()));
- HealthCheck healthCheck = new HealthCheck();
- healthCheck.setMode(HealthCheckMode.HEARTBEAT);
- microserviceInstance.setHealthCheck(healthCheck);
+ .valueOf(environment.getProperty(BootStrapProperties.CONFIG_SERVICE_INSTANCE_INITIAL_STATUS,
+ BootStrapProperties.DEFAULT_MICROSERVICE_INSTANCE_INITIAL_STATUS)));
// load properties
- Map<String, String> propertiesMap = InstancePropertiesLoader.INSTANCE.loadProperties(configuration);
+ Map<String, String> propertiesMap = InstancePropertiesLoader.INSTANCE.loadProperties(environment);
microserviceInstance.setProperties(propertiesMap);
// load data center information
- loadDataCenterInfo(microserviceInstance);
+ loadDataCenterInfo(microserviceInstance, environment);
return microserviceInstance;
}
- private static void loadDataCenterInfo(MicroserviceInstance microserviceInstance) {
- String dataCenterName = DynamicPropertyFactory.getInstance()
- .getStringProperty("servicecomb.datacenter.name", null)
- .get();
- String region = DynamicPropertyFactory.getInstance().
- getStringProperty("servicecomb.datacenter.region", null).get();
- String availableZone = DynamicPropertyFactory.getInstance().
- getStringProperty("servicecomb.datacenter.availableZone", null).get();
+ private static void loadDataCenterInfo(MicroserviceInstance microserviceInstance, Environment environment) {
+ String dataCenterName = environment.getProperty("servicecomb.datacenter.name");
+ String region = environment.getProperty("servicecomb.datacenter.region");
+ String availableZone = environment.getProperty("servicecomb.datacenter.availableZone");
if (dataCenterName == null && region == null && availableZone == null) {
return;
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java
index 4cee687..f3f0351 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java
@@ -20,11 +20,11 @@
import java.util.HashMap;
import java.util.Map;
-import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.registry.api.PropertyExtended;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.core.env.Environment;
/**
* Loading microservice properties
@@ -32,24 +32,24 @@
public abstract class AbstractPropertiesLoader {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPropertiesLoader.class);
- public Map<String, String> loadProperties(Configuration configuration) {
+ public Map<String, String> loadProperties(Environment environment) {
Map<String, String> propertiesMap = new HashMap<>();
- loadPropertiesFromConfigMap(configuration, propertiesMap);
- loadPropertiesFromExtendedClass(configuration, propertiesMap);
+ loadPropertiesFromConfigMap(environment, propertiesMap);
+ loadPropertiesFromExtendedClass(environment, propertiesMap);
return propertiesMap;
}
- protected abstract Map<String, String> readProperties(Configuration configuration);
+ protected abstract Map<String, String> readProperties(Environment environment);
- protected abstract String readPropertiesExtendedClass(Configuration configuration);
+ protected abstract String readPropertiesExtendedClass(Environment environment);
- private void loadPropertiesFromConfigMap(Configuration configuration, Map<String, String> propertiesMap) {
- propertiesMap.putAll(readProperties(configuration));
+ private void loadPropertiesFromConfigMap(Environment environment, Map<String, String> propertiesMap) {
+ propertiesMap.putAll(readProperties(environment));
}
- private void loadPropertiesFromExtendedClass(Configuration configuration, Map<String, String> propertiesMap) {
- String extendedPropertyClass = readPropertiesExtendedClass(configuration);
+ private void loadPropertiesFromExtendedClass(Environment environment, Map<String, String> propertiesMap) {
+ String extendedPropertyClass = readPropertiesExtendedClass(environment);
if (StringUtils.isEmpty(extendedPropertyClass)) {
return;
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java
index 99ac20c..f1ce406 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java
@@ -19,8 +19,8 @@
import java.util.Map;
-import org.apache.commons.configuration.Configuration;
import org.apache.servicecomb.config.BootStrapProperties;
+import org.springframework.core.env.Environment;
public final class InstancePropertiesLoader extends AbstractPropertiesLoader {
@@ -29,14 +29,13 @@
private InstancePropertiesLoader() {
}
-
@Override
- protected Map<String, String> readProperties(Configuration configuration) {
- return BootStrapProperties.readServiceInstanceProperties(configuration);
+ protected Map<String, String> readProperties(Environment environment) {
+ return environment.getProperty(BootStrapProperties.CONFIG_SERVICE_INSTANCE_PROPERTIES, Map.class);
}
@Override
- protected String readPropertiesExtendedClass(Configuration configuration) {
- return BootStrapProperties.readServiceInstanceExtendedClass(configuration);
+ protected String readPropertiesExtendedClass(Environment environment) {
+ return environment.getProperty(BootStrapProperties.CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS);
}
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java
index 2ac8865..174a8e3 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java
@@ -19,8 +19,8 @@
import java.util.Map;
-import org.apache.commons.configuration.Configuration;
import org.apache.servicecomb.config.BootStrapProperties;
+import org.springframework.core.env.Environment;
public final class MicroservicePropertiesLoader extends AbstractPropertiesLoader {
@@ -30,12 +30,12 @@
}
@Override
- protected Map<String, String> readProperties(Configuration configuration) {
- return BootStrapProperties.readServiceProperties(configuration);
+ protected Map<String, String> readProperties(Environment environment) {
+ return environment.getProperty(BootStrapProperties.CONFIG_SERVICE_PROPERTIES, Map.class);
}
@Override
- protected String readPropertiesExtendedClass(Configuration configuration) {
- return BootStrapProperties.readServiceExtendedClass(configuration);
+ protected String readPropertiesExtendedClass(Environment environment) {
+ return environment.getProperty(BootStrapProperties.CONFIG_SERVICE_EXTENDED_CLASS);
}
}