You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/05/28 11:42:36 UTC
[servicecomb-java-chassis] 01/03: [SCB-1942]change Discovery
getSchema with instances param
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 6f24ec91154fb0c53ffed1ff4f82e11027b4cd2c
Author: liubao <bi...@qq.com>
AuthorDate: Wed May 27 15:37:30 2020 +0800
[SCB-1942]change Discovery getSchema with instances param
---
.../core/definition/ServiceRegistryListener.java | 9 +++++----
.../apache/servicecomb/registry/DiscoveryManager.java | 7 ++++---
.../apache/servicecomb/registry/api/Discovery.java | 4 +++-
.../apache/servicecomb/registry/api/Registration.java | 5 +++++
.../registry/cache/MicroserviceInstanceCache.java | 2 +-
.../servicecomb/registry/swagger/SwaggerLoader.java | 12 ++++++++----
.../servicecomb/localregistry/LocalDiscovery.java | 4 +++-
.../serviceregistry/ServiceCenterDiscovery.java | 4 +++-
.../serviceregistry/swagger/TestSwaggerLoader.java | 19 ++++++++++++-------
9 files changed, 44 insertions(+), 22 deletions(-)
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java b/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
index 24ac745..c10f0a5 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
@@ -24,13 +24,13 @@ import static org.apache.servicecomb.core.definition.CoreMetaUtils.getMicroservi
import org.apache.servicecomb.core.SCBEngine;
import org.apache.servicecomb.foundation.common.event.EnableExceptionPropagation;
import org.apache.servicecomb.foundation.common.event.SubscriberOrder;
+import org.apache.servicecomb.registry.api.event.CreateMicroserviceEvent;
+import org.apache.servicecomb.registry.api.event.CreateMicroserviceVersionEvent;
+import org.apache.servicecomb.registry.api.event.DestroyMicroserviceEvent;
import org.apache.servicecomb.registry.api.registry.Microservice;
import org.apache.servicecomb.registry.consumer.MicroserviceVersion;
import org.apache.servicecomb.registry.consumer.MicroserviceVersions;
import org.apache.servicecomb.registry.definition.DefinitionConst;
-import org.apache.servicecomb.registry.api.event.CreateMicroserviceEvent;
-import org.apache.servicecomb.registry.api.event.CreateMicroserviceVersionEvent;
-import org.apache.servicecomb.registry.api.event.DestroyMicroserviceEvent;
import com.google.common.eventbus.Subscribe;
@@ -87,7 +87,8 @@ public class ServiceRegistryListener {
if (!isServiceCenter) {
// TODO: get schemas from instance
for (String schemaId : microservice.getSchemas()) {
- Swagger swagger = scbEngine.getSwaggerLoader().loadSwagger(microservice, schemaId);
+ Swagger swagger = scbEngine.getSwaggerLoader().loadSwagger(microservice, microserviceVersion.getInstances(),
+ schemaId);
microserviceMeta.registerSchemaMeta(schemaId, swagger);
}
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
index 23f98df..959e7e3 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
@@ -17,6 +17,7 @@
package org.apache.servicecomb.registry;
+import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
@@ -87,7 +88,7 @@ public class DiscoveryManager {
return this.appManager;
}
- public MicroserviceInstance findMicroserviceInstance(String serviceId, String instanceId) {
+ public MicroserviceInstance getMicroserviceInstance(String serviceId, String instanceId) {
for (Discovery discovery : discoveryList) {
MicroserviceInstance microserviceInstance = discovery.getMicroserviceInstance(serviceId, instanceId);
if (microserviceInstance != null) {
@@ -97,9 +98,9 @@ public class DiscoveryManager {
return null;
}
- public String getSchema(String microserviceId, String schemaId) {
+ public String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId) {
for (Discovery discovery : discoveryList) {
- String schema = discovery.getSchema(microserviceId, schemaId);
+ String schema = discovery.getSchema(microserviceId, instances, schemaId);
if (schema != null) {
return schema;
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java
index a81416c..52c68a4 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Discovery.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.registry.api;
+import java.util.Collection;
+
import org.apache.servicecomb.foundation.common.utils.SPIEnabled;
import org.apache.servicecomb.foundation.common.utils.SPIOrder;
import org.apache.servicecomb.registry.api.registry.Microservice;
@@ -39,7 +41,7 @@ public interface Discovery extends SPIEnabled, SPIOrder, LifeCycle {
*
* Life Cycle:This method is called anytime after <code>run</code>.
*/
- String getSchema(String microserviceId, String schemaId);
+ String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId);
/**
* get MicroserviceInstance </br>
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java
index c1155f6..5f72f0e 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/Registration.java
@@ -53,6 +53,11 @@ public interface Registration extends SPIEnabled, SPIOrder, LifeCycle {
*/
String getAppId();
+ /**
+ * update MicroserviceInstance status </br>
+ *
+ * Life Cycle:This method is called anytime after <code>run</code>.
+ */
boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus status);
/**
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java
index 1de5c37..09e7702 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/cache/MicroserviceInstanceCache.java
@@ -71,7 +71,7 @@ public class MicroserviceInstanceCache {
@Override
public MicroserviceInstance call() {
- MicroserviceInstance instance = DiscoveryManager.INSTANCE.findMicroserviceInstance(serviceId, instanceId);
+ MicroserviceInstance instance = DiscoveryManager.INSTANCE.getMicroserviceInstance(serviceId, instanceId);
if (instance == null) {
throw new IllegalArgumentException("instance id not exists.");
}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java
index e57c30f..f0f757d 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/swagger/SwaggerLoader.java
@@ -18,6 +18,7 @@ package org.apache.servicecomb.registry.swagger;
import java.net.URI;
import java.net.URL;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -30,6 +31,7 @@ import org.apache.servicecomb.foundation.common.utils.ResourceUtil;
import org.apache.servicecomb.registry.DiscoveryManager;
import org.apache.servicecomb.registry.RegistrationManager;
import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
import org.apache.servicecomb.registry.definition.MicroserviceNameParser;
import org.apache.servicecomb.swagger.SwaggerUtils;
import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
@@ -132,13 +134,14 @@ public class SwaggerLoader {
.remove(schemaId);
}
- public Swagger loadSwagger(Microservice microservice, String schemaId) {
+ public Swagger loadSwagger(Microservice microservice,
+ Collection<MicroserviceInstance> instances, String schemaId) {
Swagger swagger = loadLocalSwagger(microservice.getAppId(), microservice.getServiceName(), schemaId);
if (swagger != null) {
return swagger;
}
- return loadFromRemote(microservice, schemaId);
+ return loadFromRemote(microservice, instances, schemaId);
}
public Swagger loadLocalSwagger(String appId, String shortName, String schemaId) {
@@ -182,8 +185,9 @@ public class SwaggerLoader {
return SwaggerUtils.parseAndValidateSwagger(url);
}
- private Swagger loadFromRemote(Microservice microservice, String schemaId) {
- String schemaContent = DiscoveryManager.INSTANCE.getSchema(microservice.getServiceId(), schemaId);
+ private Swagger loadFromRemote(Microservice microservice, Collection<MicroserviceInstance> instances,
+ String schemaId) {
+ String schemaContent = DiscoveryManager.INSTANCE.getSchema(microservice.getServiceId(), instances, schemaId);
if (schemaContent != null) {
LOGGER.info(
"load schema from service center, appId={}, microserviceName={}, version={}, serviceId={}, schemaId={}.",
diff --git a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java
index 51f3c99..61e8e02 100644
--- a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java
+++ b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalDiscovery.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.localregistry;
+import java.util.Collection;
+
import org.apache.servicecomb.registry.api.Discovery;
import org.apache.servicecomb.registry.api.registry.Microservice;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
@@ -59,7 +61,7 @@ public class LocalDiscovery implements Discovery {
}
@Override
- public String getSchema(String microserviceId, String schemaId) {
+ public String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId) {
return localDiscoveryStore.getSchema(microserviceId, schemaId);
}
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java
index a17e537..818e559 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterDiscovery.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.serviceregistry;
+import java.util.Collection;
+
import org.apache.servicecomb.registry.api.Discovery;
import org.apache.servicecomb.registry.api.registry.Microservice;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
@@ -57,7 +59,7 @@ public class ServiceCenterDiscovery implements Discovery {
}
@Override
- public String getSchema(String microserviceId, String schemaId) {
+ public String getSchema(String microserviceId, Collection<MicroserviceInstance> instances, String schemaId) {
return RegistryUtils
.getAggregatedSchema(microserviceId, schemaId);
}
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java
index 9138db5..4eb6169 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/swagger/TestSwaggerLoader.java
@@ -41,8 +41,8 @@ import org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
import org.apache.servicecomb.foundation.common.utils.JvmUtils;
import org.apache.servicecomb.foundation.common.utils.ResourceUtil;
import org.apache.servicecomb.registry.RegistrationManager;
-import org.apache.servicecomb.serviceregistry.TestRegistryBase;
import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.serviceregistry.TestRegistryBase;
import org.apache.servicecomb.swagger.SwaggerUtils;
import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.junit.Assert;
@@ -67,7 +67,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
.getVersions().values().iterator().next().getMicroservice();
- Assert.assertSame(swagger, RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId));
+ Assert.assertSame(swagger, RegistrationManager.INSTANCE
+ .getSwaggerLoader().loadSwagger(microservice, null, schemaId));
}
@Test
@@ -84,7 +85,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
.getVersions().values().iterator().next().getMicroservice();
- Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+ Swagger loadedSwagger = RegistrationManager.INSTANCE
+ .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
Assert.assertNotSame(swagger, loadedSwagger);
Assert.assertEquals(swagger, loadedSwagger);
}
@@ -98,7 +100,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
.getVersions().values().iterator().next().getMicroservice();
- Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+ Swagger loadedSwagger = RegistrationManager.INSTANCE
+ .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
Assert.assertNotSame(swagger, loadedSwagger);
Assert.assertEquals(swagger, loadedSwagger);
}
@@ -112,7 +115,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
Microservice microservice = appManager.getOrCreateMicroserviceVersions(appId, serviceName)
.getVersions().values().iterator().next().getMicroservice();
- Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+ Swagger loadedSwagger = RegistrationManager.INSTANCE
+ .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
Assert.assertNotSame(swagger, loadedSwagger);
Assert.assertEquals(swagger, loadedSwagger);
}
@@ -128,7 +132,7 @@ public class TestSwaggerLoader extends TestRegistryBase {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage(
"no schema in local, and can not get schema from service center, appId=other, microserviceName=ms3, version=1.0, serviceId=003, schemaId=hello.");
- RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+ RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, null, schemaId);
}
@Test
@@ -138,7 +142,8 @@ public class TestSwaggerLoader extends TestRegistryBase {
Microservice microservice = appManager.getOrCreateMicroserviceVersions("other", "ms3")
.getVersions().values().iterator().next().getMicroservice();
- Swagger loadedSwagger = RegistrationManager.INSTANCE.getSwaggerLoader().loadSwagger(microservice, schemaId);
+ Swagger loadedSwagger = RegistrationManager.INSTANCE
+ .getSwaggerLoader().loadSwagger(microservice, null, schemaId);
Assert.assertNotSame(swagger, loadedSwagger);
Assert.assertEquals(swagger, loadedSwagger);
}