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 2018/08/14 12:52:08 UTC

[incubator-servicecomb-java-chassis] 01/03: [SCB-612]delete useless MicroserviceMetaManager

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/incubator-servicecomb-java-chassis.git

commit 57f828e532cc927d258d03bbea6add4c4cae91d5
Author: heyile <he...@huawei.com>
AuthorDate: Wed Aug 8 09:56:33 2018 +0800

    [SCB-612]delete useless MicroserviceMetaManager
---
 .../common/rest/RestEngineSchemaListener.java      | 14 +---
 .../common/rest/RestProducerInvocation.java        | 12 +---
 .../common/rest/TestAbstractRestInvocation.java    | 15 ++---
 .../common/rest/TestRestProducerInvocation.java    | 34 +++++-----
 .../servicecomb/core/CseApplicationListener.java   |  5 ++
 .../org/apache/servicecomb/core/CseContext.java    | 12 ----
 .../org/apache/servicecomb/core/SCBEngine.java     | 12 ++++
 .../core/definition/MicroserviceMetaManager.java   | 76 ----------------------
 .../definition/loader/SchemaListenerManager.java   | 37 ++++++-----
 .../core/definition/loader/SchemaLoader.java       | 20 +++---
 .../definition/schema/AbstractSchemaFactory.java   | 10 +--
 .../definition/schema/ProducerSchemaFactory.java   | 13 +++-
 .../consumer/AbstractConsumerProvider.java         |  5 --
 .../provider/producer/ProducerProviderManager.java | 10 +--
 .../servicecomb/core/unittest/UnitTestMeta.java    | 22 +++----
 .../apache/servicecomb/core/TestDefinition.java    | 24 -------
 .../definition/loader/TestDynamicSchemaLoader.java | 15 +++--
 .../loader/TestSchemaListenerManager.java          |  2 -
 .../schema/TestProducerSchemaFactory.java          | 25 +++----
 .../producer/TestProducerProviderManager.java      |  4 +-
 .../springmvc/server/ProducerTestsAfterBootup.java | 10 +--
 .../metrics/core/ThreadPoolMetersInitializer.java  | 14 ++--
 .../core/TestThreadPoolMetersInitializer.java      | 16 ++---
 .../servicecomb/provider/common/MockUtil.java      |  2 -
 .../transport/highway/HighwayServerInvoke.java     | 11 +---
 .../highway/TestHighwayServerConnection.java       | 30 ++++-----
 .../transport/highway/TestHighwayServerInvoke.java |  2 +-
 27 files changed, 148 insertions(+), 304 deletions(-)

diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestEngineSchemaListener.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestEngineSchemaListener.java
index 8cc33a5..f9be1b9 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestEngineSchemaListener.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestEngineSchemaListener.java
@@ -20,25 +20,16 @@ package org.apache.servicecomb.common.rest;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.inject.Inject;
-
 import org.apache.servicecomb.common.rest.locator.ServicePathManager;
 import org.apache.servicecomb.core.BootListener;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.definition.loader.SchemaListener;
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.springframework.stereotype.Component;
 
 @Component
 public class RestEngineSchemaListener implements SchemaListener, BootListener {
-  private MicroserviceMetaManager microserviceMetaManager;
-
-  @Inject
-  public void setMicroserviceMetaManager(MicroserviceMetaManager microserviceMetaManager) {
-    this.microserviceMetaManager = microserviceMetaManager;
-  }
 
   @Override
   public void onBootEvent(BootEvent event) {
@@ -46,8 +37,7 @@ public class RestEngineSchemaListener implements SchemaListener, BootListener {
       return;
     }
 
-    MicroserviceMeta microserviceMeta =
-        microserviceMetaManager.getOrCreateMicroserviceMeta(RegistryUtils.getMicroservice());
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     ServicePathManager servicePathManager = ServicePathManager.getServicePathManager(microserviceMeta);
     if (servicePathManager != null) {
       servicePathManager.buildProducerPaths();
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocation.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocation.java
index 673c684..f2fbee5 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocation.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocation.java
@@ -22,14 +22,12 @@ import java.util.List;
 import org.apache.servicecomb.common.rest.filter.HttpServerFilter;
 import org.apache.servicecomb.common.rest.locator.OperationLocator;
 import org.apache.servicecomb.common.rest.locator.ServicePathManager;
-import org.apache.servicecomb.core.Const;
-import org.apache.servicecomb.core.CseContext;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.Transport;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.invocation.InvocationFactory;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 
 public class RestProducerInvocation extends AbstractRestInvocation {
@@ -54,13 +52,7 @@ public class RestProducerInvocation extends AbstractRestInvocation {
   }
 
   protected void findRestOperation() {
-    String targetMicroserviceName = requestEx.getHeader(Const.TARGET_MICROSERVICE);
-    if (targetMicroserviceName == null) {
-      // for compatible
-      targetMicroserviceName = RegistryUtils.getMicroservice().getServiceName();
-    }
-    MicroserviceMeta selfMicroserviceMeta =
-        CseContext.getInstance().getMicroserviceMetaManager().ensureFindValue(targetMicroserviceName);
+    MicroserviceMeta selfMicroserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     findRestOperation(selfMicroserviceMeta);
   }
 
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
index cc0c2c0..30c993b 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
@@ -17,15 +17,14 @@
 
 package org.apache.servicecomb.common.rest;
 
+import javax.ws.rs.core.Response.Status;
+import javax.xml.ws.Holder;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Executor;
 
-import javax.ws.rs.core.Response.Status;
-import javax.xml.ws.Holder;
-
 import org.apache.servicecomb.common.rest.codec.produce.ProduceProcessorManager;
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.common.rest.filter.HttpServerFilter;
@@ -39,7 +38,6 @@ import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.SCBStatus;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.event.InvocationFinishEvent;
@@ -68,14 +66,14 @@ import org.junit.rules.ExpectedException;
 
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
-
-import io.vertx.core.buffer.Buffer;
 import mockit.Deencapsulation;
 import mockit.Expectations;
 import mockit.Mock;
 import mockit.MockUp;
 import mockit.Mocked;
 
+import io.vertx.core.buffer.Buffer;
+
 public class TestAbstractRestInvocation {
   @Mocked
   HttpServletRequestEx requestEx;
@@ -87,9 +85,6 @@ public class TestAbstractRestInvocation {
   ReferenceConfig endpoint;
 
   @Mocked
-  MicroserviceMetaManager microserviceMetaManager;
-
-  @Mocked
   SchemaMeta schemaMeta;
 
   @Mocked
@@ -691,8 +686,6 @@ public class TestAbstractRestInvocation {
       {
         requestEx.getHeader(Const.TARGET_MICROSERVICE);
         result = "ms";
-        microserviceMetaManager.ensureFindValue("ms");
-        result = microserviceMeta;
         ServicePathManager.getServicePathManager(microserviceMeta);
         result = null;
       }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java
index 60a503c..ec63b3b 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java
@@ -28,9 +28,9 @@ import org.apache.servicecomb.common.rest.locator.OperationLocator;
 import org.apache.servicecomb.common.rest.locator.ServicePathManager;
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.core.CseContext;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.Transport;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.foundation.vertx.http.AbstractHttpServletRequest;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
@@ -63,7 +63,7 @@ public class TestRestProducerInvocation {
   RestOperationMeta restOperationMeta;
 
   @Mocked
-  MicroserviceMetaManager microserviceMetaManager;
+  MicroserviceMeta microserviceMeta;
 
   List<HttpServerFilter> httpServerFilters = Collections.emptyList();
 
@@ -80,11 +80,6 @@ public class TestRestProducerInvocation {
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
 
-  @Before
-  public void setup() {
-    CseContext.getInstance().setMicroserviceMetaManager(microserviceMetaManager);
-  }
-
   private void initRestProducerInvocation() {
     restProducerInvocation.transport = transport;
     restProducerInvocation.requestEx = requestEx;
@@ -93,9 +88,14 @@ public class TestRestProducerInvocation {
     restProducerInvocation.httpServerFilters = httpServerFilters;
   }
 
+  @Before
+  public void setup() {
+    SCBEngine.getInstance().setProducerMicroMeta(microserviceMeta);
+  }
+
   @After
   public void teardown() {
-    CseContext.getInstance().setMicroserviceMetaManager(null);
+    SCBEngine.getInstance().setProducerMicroMeta(null);
   }
 
   @Test
@@ -149,28 +149,32 @@ public class TestRestProducerInvocation {
     Microservice microservice = new Microservice();
     microservice.setServiceName("ms");
 
-    Exception e = new Exception("stop");
     new Expectations(RegistryUtils.class) {
       {
         requestEx.getHeader(Const.TARGET_MICROSERVICE);
         result = null;
         RegistryUtils.getMicroservice();
         result = microservice;
-        microserviceMetaManager.ensureFindValue("ms");
-        result = e;
+      }
+    };
+    new Expectations(ServicePathManager.class) {
+      {
+        //just make the method throw Exception
+        ServicePathManager.getServicePathManager(microserviceMeta);
+        result = null;
       }
     };
     restProducerInvocation = new RestProducerInvocation();
     initRestProducerInvocation();
 
     expectedException.expect(Exception.class);
-    expectedException.expectMessage("stop");
+    expectedException.expectMessage("[message=Not Found]");
     restProducerInvocation.findRestOperation();
   }
 
   @Test
-  public void findRestOperationNormal(@Mocked MicroserviceMeta microserviceMeta,
-      @Mocked ServicePathManager servicePathManager, @Mocked OperationLocator locator) {
+  public void findRestOperationNormal(@Mocked ServicePathManager servicePathManager,
+      @Mocked OperationLocator locator) {
     requestEx = new AbstractHttpServletRequest() {
       @Override
       public String getRequestURI() {
@@ -190,8 +194,6 @@ public class TestRestProducerInvocation {
     Map<String, String> pathVars = new HashMap<>();
     new Expectations(ServicePathManager.class) {
       {
-        microserviceMetaManager.ensureFindValue("ms");
-        result = microserviceMeta;
         ServicePathManager.getServicePathManager(microserviceMeta);
         result = servicePathManager;
         servicePathManager.producerLocateOperation(anyString, anyString);
diff --git a/core/src/main/java/org/apache/servicecomb/core/CseApplicationListener.java b/core/src/main/java/org/apache/servicecomb/core/CseApplicationListener.java
index 38793cd..3382789 100644
--- a/core/src/main/java/org/apache/servicecomb/core/CseApplicationListener.java
+++ b/core/src/main/java/org/apache/servicecomb/core/CseApplicationListener.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.core;
 
+import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.loader.SchemaListenerManager;
 import org.apache.servicecomb.core.provider.consumer.ConsumerProviderManager;
 import org.apache.servicecomb.core.provider.producer.ProducerProviderManager;
@@ -64,6 +65,10 @@ public class CseApplicationListener
       }
 
       if (SCBEngine.getInstance().getBootListenerList() == null) {
+        //SCBEngine init first, hence we do not worry that when other bean class using the
+        //producer microserviceMeta, the SCBEngine is not inited.
+        String serviceName = RegistryUtils.getMicroservice().getServiceName();
+        SCBEngine.getInstance().setProducerMicroMeta(new MicroserviceMeta(serviceName));
         SCBEngine.getInstance().setProducerProviderManager(applicationContext.getBean(ProducerProviderManager.class));
         SCBEngine.getInstance().setConsumerProviderManager(applicationContext.getBean(ConsumerProviderManager.class));
         SCBEngine.getInstance().setTransportManager(applicationContext.getBean(TransportManager.class));
diff --git a/core/src/main/java/org/apache/servicecomb/core/CseContext.java b/core/src/main/java/org/apache/servicecomb/core/CseContext.java
index e372d0a..45b8415 100644
--- a/core/src/main/java/org/apache/servicecomb/core/CseContext.java
+++ b/core/src/main/java/org/apache/servicecomb/core/CseContext.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.core;
 
 import javax.inject.Inject;
 
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.loader.SchemaListenerManager;
 import org.apache.servicecomb.core.definition.loader.SchemaLoader;
 import org.apache.servicecomb.core.definition.schema.ConsumerSchemaFactory;
@@ -39,8 +38,6 @@ public class CseContext {
 
   private SchemaLoader schemaLoader;
 
-  private MicroserviceMetaManager microserviceMetaManager;
-
   private ConsumerSchemaFactory consumerSchemaFactory;
 
   private ConsumerProviderManager consumerProviderManager;
@@ -59,10 +56,6 @@ public class CseContext {
     return schemaLoader;
   }
 
-  public MicroserviceMetaManager getMicroserviceMetaManager() {
-    return microserviceMetaManager;
-  }
-
   public ConsumerSchemaFactory getConsumerSchemaFactory() {
     return consumerSchemaFactory;
   }
@@ -89,11 +82,6 @@ public class CseContext {
   }
 
   @Inject
-  public void setMicroserviceMetaManager(MicroserviceMetaManager microserviceMetaManager) {
-    this.microserviceMetaManager = microserviceMetaManager;
-  }
-
-  @Inject
   public void setSchemaLoader(SchemaLoader schemaLoader) {
     this.schemaLoader = schemaLoader;
   }
diff --git a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
index 6e0aefe..39dbd83 100644
--- a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
+++ b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
@@ -25,6 +25,7 @@ import javax.ws.rs.core.Response.Status;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.core.BootListener.BootEvent;
 import org.apache.servicecomb.core.BootListener.EventType;
+import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.loader.SchemaListenerManager;
 import org.apache.servicecomb.core.endpoint.AbstractEndpointsCache;
 import org.apache.servicecomb.core.event.InvocationFinishEvent;
@@ -55,6 +56,8 @@ public class SCBEngine {
 
   private ConsumerProviderManager consumerProviderManager;
 
+  private MicroserviceMeta producerMicroMeta;
+
   private TransportManager transportManager;
 
   private SchemaListenerManager schemaListenerManager;
@@ -67,6 +70,7 @@ public class SCBEngine {
 
   private volatile SCBStatus status = SCBStatus.DOWN;
 
+
   public void setStatus(SCBStatus status) {
     this.status = status;
   }
@@ -298,4 +302,12 @@ public class SCBEngine {
 
     return consumerProviderManager.getReferenceConfig(microserviceName);
   }
+
+  public MicroserviceMeta getProducerMicroMeta() {
+    return producerMicroMeta;
+  }
+
+  public void setProducerMicroMeta(MicroserviceMeta producerMicroMeta) {
+    this.producerMicroMeta = producerMicroMeta;
+  }
 }
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceMetaManager.java b/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceMetaManager.java
deleted file mode 100644
index a6b0c2d..0000000
--- a/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceMetaManager.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.core.definition;
-
-import java.util.Collection;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.foundation.common.RegisterManager;
-import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
-import org.springframework.stereotype.Component;
-
-/**
- * key为microserviceName(app内部)或者appId:microserviceName(跨app)
- */
-@Component
-public class MicroserviceMetaManager extends RegisterManager<String, MicroserviceMeta> {
-  private static final String MICROSERVICE_SCHEMA_MGR = "microservice meta manager";
-
-  private final Object lock = new Object();
-
-  public MicroserviceMetaManager() {
-    super(MICROSERVICE_SCHEMA_MGR);
-  }
-
-  public SchemaMeta ensureFindSchemaMeta(String microserviceName, String schemaId) {
-    MicroserviceMeta microserviceMeta = ensureFindValue(microserviceName);
-    return microserviceMeta.ensureFindSchemaMeta(schemaId);
-  }
-
-  public Collection<SchemaMeta> getAllSchemaMeta(String microserviceName) {
-    MicroserviceMeta microserviceMeta = ensureFindValue(microserviceName);
-    return microserviceMeta.getSchemaMetas();
-  }
-
-  public MicroserviceMeta getOrCreateMicroserviceMeta(Microservice microservice) {
-    String microserviceName = microservice.getServiceName();
-    MicroserviceMeta microserviceMeta = getOrCreateMicroserviceMeta(microserviceName);
-    if (!StringUtils.isEmpty(microservice.getAlias())) {
-      if (findValue(microservice.getAlias()) == null) {
-        register(microservice.getAlias(), microserviceMeta);
-      }
-    }
-
-    return microserviceMeta;
-  }
-
-  public MicroserviceMeta getOrCreateMicroserviceMeta(String microserviceName) {
-    MicroserviceMeta microserviceMeta = findValue(microserviceName);
-    if (microserviceMeta == null) {
-      synchronized (lock) {
-        microserviceMeta = findValue(microserviceName);
-        if (microserviceMeta == null) {
-          microserviceMeta = new MicroserviceMeta(microserviceName);
-          register(microserviceName, microserviceMeta);
-        }
-      }
-    }
-
-    return microserviceMeta;
-  }
-}
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaListenerManager.java b/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaListenerManager.java
index 65e9bd4..83e93f3 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaListenerManager.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaListenerManager.java
@@ -21,11 +21,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javax.inject.Inject;
-
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.SchemaMeta;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -34,32 +35,28 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class SchemaListenerManager {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(SchemaListenerManager.class);
+
   @Autowired(required = false)
   private List<SchemaListener> schemaListenerList = new ArrayList<>();
 
-  @Inject
-  private MicroserviceMetaManager microserviceMetaManager;
-
   public void setSchemaListenerList(List<SchemaListener> schemaListenerList) {
     this.schemaListenerList = schemaListenerList;
   }
 
-  public void setMicroserviceMetaManager(MicroserviceMetaManager microserviceMetaManager) {
-    this.microserviceMetaManager = microserviceMetaManager;
-  }
-
   public void notifySchemaListener(MicroserviceMeta... microserviceMetas) {
     List<SchemaMeta> schemaMetaList = new ArrayList<>();
     for (MicroserviceMeta microserviceMeta : microserviceMetas) {
       schemaMetaList.addAll(microserviceMeta.getSchemaMetas());
     }
-
     notifySchemaListener(schemaMetaList.toArray(new SchemaMeta[schemaMetaList.size()]));
   }
 
   public void notifySchemaListener() {
-    Collection<MicroserviceMeta> microserviceMetas = microserviceMetaManager.values();
-    notifySchemaListener(microserviceMetas.toArray(new MicroserviceMeta[microserviceMetas.size()]));
+    //only one instance
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
+    notifySchemaListener(microserviceMeta);
   }
 
   public void notifySchemaListener(SchemaMeta... schemaMetas) {
@@ -74,12 +71,22 @@ public class SchemaListenerManager {
   }
 
   public SchemaMeta ensureFindSchemaMeta(String microserviceName, String schemaId) {
-    MicroserviceMeta microserviceMeta = microserviceMetaManager.ensureFindValue(microserviceName);
+    if (!RegistryUtils.getMicroservice().getServiceName().equals(microserviceName)) {
+      LOGGER.error("miroserviceName : {} is different from the default microserviceName :{}",
+          microserviceName,
+          RegistryUtils.getMicroservice().getServiceName());
+    }
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     return microserviceMeta.ensureFindSchemaMeta(schemaId);
   }
 
   public Collection<SchemaMeta> getAllSchemaMeta(String microserviceName) {
-    MicroserviceMeta microserviceMeta = microserviceMetaManager.ensureFindValue(microserviceName);
+    if (!RegistryUtils.getMicroservice().getServiceName().equals(microserviceName)) {
+      LOGGER.error("miroserviceName : {} is different from the default microserviceName :{}",
+          microserviceName,
+          RegistryUtils.getMicroservice().getServiceName());
+    }
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     return microserviceMeta.getSchemaMetas();
   }
 }
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaLoader.java b/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaLoader.java
index aa612c3..40e1d68 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaLoader.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/loader/SchemaLoader.java
@@ -19,13 +19,11 @@ package org.apache.servicecomb.core.definition.loader;
 
 import java.util.List;
 
-import javax.inject.Inject;
-
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.servicecomb.core.Handler;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.definition.SchemaUtils;
 import org.apache.servicecomb.core.handler.ConsumerHandlerManager;
@@ -48,13 +46,6 @@ import io.swagger.models.Swagger;
 public class SchemaLoader {
   private static final Logger LOGGER = LoggerFactory.getLogger(SchemaLoader.class);
 
-  @Inject
-  protected MicroserviceMetaManager microserviceMetaManager;
-
-  public void setMicroserviceMetaManager(MicroserviceMetaManager microserviceMetaManager) {
-    this.microserviceMetaManager = microserviceMetaManager;
-  }
-
   /*
    * resource的路径格式,至少是以这个形式结尾:schemaId.yaml
    */
@@ -82,8 +73,13 @@ public class SchemaLoader {
 
   public SchemaMeta registerSchema(String microserviceName, String schemaId,
       Swagger swagger) {
-    MicroserviceMeta microserviceMeta = microserviceMetaManager.getOrCreateMicroserviceMeta(microserviceName);
-
+    //check whether the microserviceName is right
+    if (!RegistryUtils.getMicroservice().getServiceName().equals(microserviceName)) {
+      LOGGER.error("miroserviceName : {} is different from the default microserviceName :{}",
+          microserviceName,
+          RegistryUtils.getMicroservice().getServiceName());
+    }
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     return registerSchema(microserviceMeta, schemaId, swagger);
   }
 
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/schema/AbstractSchemaFactory.java b/core/src/main/java/org/apache/servicecomb/core/definition/schema/AbstractSchemaFactory.java
index 9d62c52..bf2336d 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/schema/AbstractSchemaFactory.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/schema/AbstractSchemaFactory.java
@@ -17,12 +17,10 @@
 
 package org.apache.servicecomb.core.definition.schema;
 
-import java.net.URL;
-
 import javax.inject.Inject;
+import java.net.URL;
 
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.definition.SchemaUtils;
 import org.apache.servicecomb.core.definition.loader.SchemaLoader;
@@ -40,8 +38,6 @@ import io.swagger.models.Swagger;
  * 在producer场景中,如果本地没有契约,需要根据实现类动态生成契约
  */
 public abstract class AbstractSchemaFactory<CONTEXT extends SchemaContext> {
-  @Inject
-  protected MicroserviceMetaManager microserviceMetaManager;
 
   protected SchemaLoader schemaLoader;
 
@@ -53,10 +49,6 @@ public abstract class AbstractSchemaFactory<CONTEXT extends SchemaContext> {
     this.schemaLoader = schemaLoader;
   }
 
-  public void setMicroserviceMetaManager(MicroserviceMetaManager microserviceMetaManager) {
-    this.microserviceMetaManager = microserviceMetaManager;
-  }
-
   // 因为aop的存在,schemaInstance的class不一定等于schemaClass
   protected SchemaMeta getOrCreateSchema(CONTEXT context) {
     MicroserviceMeta microserviceMeta = context.getMicroserviceMeta();
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/schema/ProducerSchemaFactory.java b/core/src/main/java/org/apache/servicecomb/core/definition/schema/ProducerSchemaFactory.java
index 87e7cb2..d5b435f 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/schema/ProducerSchemaFactory.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/schema/ProducerSchemaFactory.java
@@ -20,15 +20,15 @@ package org.apache.servicecomb.core.definition.schema;
 import static org.apache.servicecomb.serviceregistry.api.Const.REGISTER_URL_PREFIX;
 import static org.apache.servicecomb.serviceregistry.api.Const.URL_PREFIX;
 
+import javax.inject.Inject;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
 
-import javax.inject.Inject;
-
 import org.apache.servicecomb.core.Const;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
@@ -77,7 +77,14 @@ public class ProducerSchemaFactory extends AbstractSchemaFactory<ProducerSchemaC
   public SchemaMeta getOrCreateProducerSchema(String microserviceName, String schemaId,
       Class<?> producerClass,
       Object producerInstance) {
-    MicroserviceMeta microserviceMeta = microserviceMetaManager.getOrCreateMicroserviceMeta(microserviceName);
+
+    if (!RegistryUtils.getMicroservice().getServiceName().equals(microserviceName)) {
+      LOGGER.error("miroserviceName : {} is different from the default microserviceName :{}",
+          microserviceName,
+          RegistryUtils.getMicroservice().getServiceName());
+    }
+
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
 
     ProducerSchemaContext context = new ProducerSchemaContext();
     context.setMicroserviceMeta(microserviceMeta);
diff --git a/core/src/main/java/org/apache/servicecomb/core/provider/consumer/AbstractConsumerProvider.java b/core/src/main/java/org/apache/servicecomb/core/provider/consumer/AbstractConsumerProvider.java
index 1493d59..2c7b2ff 100644
--- a/core/src/main/java/org/apache/servicecomb/core/provider/consumer/AbstractConsumerProvider.java
+++ b/core/src/main/java/org/apache/servicecomb/core/provider/consumer/AbstractConsumerProvider.java
@@ -17,14 +17,9 @@
 
 package org.apache.servicecomb.core.provider.consumer;
 
-import javax.inject.Inject;
-
 import org.apache.servicecomb.core.ConsumerProvider;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 
 public abstract class AbstractConsumerProvider implements ConsumerProvider {
-  @Inject
-  protected MicroserviceMetaManager microserviceMetaManager;
 
   @Override
   public void init() throws Exception {
diff --git a/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java b/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java
index b9b6b41..740f693 100644
--- a/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java
+++ b/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java
@@ -22,13 +22,11 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 
-import javax.inject.Inject;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.servicecomb.core.BootListener;
 import org.apache.servicecomb.core.ProducerProvider;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.definition.SchemaUtils;
@@ -46,18 +44,14 @@ public class ProducerProviderManager implements BootListener {
   @Autowired(required = false)
   private List<ProducerProvider> producerProviderList = Collections.emptyList();
 
-  @Inject
-  private MicroserviceMetaManager microserviceMetaManager;
-
   private MicroserviceMeta microserviceMeta;
 
   public void init() throws Exception {
     for (ProducerProvider provider : producerProviderList) {
       provider.init();
     }
-
     Microservice microservice = RegistryUtils.getMicroservice();
-    microserviceMeta = microserviceMetaManager.getOrCreateMicroserviceMeta(microservice);
+    microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     for (SchemaMeta schemaMeta : microserviceMeta.getSchemaMetas()) {
       String content = SchemaUtils.swaggerToString(schemaMeta.getSwagger());
       microservice.addSchema(schemaMeta.getSchemaId(), content);
diff --git a/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java b/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
index 8d9c5b5..f285f73 100644
--- a/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
+++ b/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
@@ -22,8 +22,8 @@ import java.util.List;
 
 import org.apache.servicecomb.core.CseContext;
 import org.apache.servicecomb.core.Handler;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.PrivateMicroserviceVersionMetaFactory;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.definition.loader.SchemaListenerManager;
@@ -47,15 +47,15 @@ import org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUti
 import org.mockito.Mockito;
 import org.springframework.context.ApplicationContext;
 
-import io.swagger.models.Swagger;
 import mockit.Mock;
 import mockit.MockUp;
 
+import io.swagger.models.Swagger;
+
 /**
  * when SCBEngine finished, UnitTestMeta will be deleted
  */
 public class UnitTestMeta {
-  private MicroserviceMetaManager microserviceMetaManager = new MicroserviceMetaManager();
 
   private SchemaListenerManager schemaListenerManager = new SchemaListenerManager();
 
@@ -69,6 +69,8 @@ public class UnitTestMeta {
 
   private SchemaLoader schemaLoader = new SchemaLoader();
 
+  private MicroserviceMeta microserviceMeta;
+
   private ServiceRegistry serviceRegistry;
 
   public ServiceRegistry getServiceRegistry() {
@@ -85,13 +87,12 @@ public class UnitTestMeta {
     serviceRegistry.init();
     serviceRegistry.getAppManager().setMicroserviceVersionFactory(new PrivateMicroserviceVersionMetaFactory());
     RegistryUtils.setServiceRegistry(serviceRegistry);
-
-    schemaLoader.setMicroserviceMetaManager(microserviceMetaManager);
-
+    microserviceMeta = new MicroserviceMeta(RegistryUtils.getMicroservice().getServiceName());
+    SCBEngine.getInstance().setProducerMicroMeta(microserviceMeta);
     consumerProviderManager = new ConsumerProviderManager();
 
     consumerSchemaFactory = new ConsumerSchemaFactory();
-    consumerSchemaFactory.setMicroserviceMetaManager(microserviceMetaManager);
+
     consumerSchemaFactory.setSchemaLoader(schemaLoader);
 
     consumerProviderManager.setAppManager(RegistryUtils.getServiceRegistry().getAppManager());
@@ -128,18 +129,13 @@ public class UnitTestMeta {
     init();
   }
 
-
-  public MicroserviceMetaManager getMicroserviceMetaManager() {
-    return microserviceMetaManager;
-  }
-
   public SchemaMeta getOrCreateSchemaMeta(Class<?> impl) {
     return getOrCreateSchemaMeta("app", "test", impl.getName(), impl);
   }
 
   public SchemaMeta getOrCreateSchemaMeta(String appId, String microserviceName, String schemaId, Class<?> impl) {
     String longName = appId + ":" + microserviceName;
-    MicroserviceMeta microserviceMeta = microserviceMetaManager.getOrCreateMicroserviceMeta(longName);
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     SchemaMeta schemaMeta = microserviceMeta.findSchemaMeta(schemaId);
     if (schemaMeta != null) {
       return schemaMeta;
diff --git a/core/src/test/java/org/apache/servicecomb/core/TestDefinition.java b/core/src/test/java/org/apache/servicecomb/core/TestDefinition.java
index 9f91589..3416048 100644
--- a/core/src/test/java/org/apache/servicecomb/core/TestDefinition.java
+++ b/core/src/test/java/org/apache/servicecomb/core/TestDefinition.java
@@ -19,14 +19,9 @@ package org.apache.servicecomb.core;
 
 import org.apache.servicecomb.core.definition.CommonService;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
-import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
-import io.swagger.models.Info;
-import io.swagger.models.Swagger;
-
 public class TestDefinition {
   @Test
   public void testCommonService() {
@@ -68,23 +63,4 @@ public class TestDefinition {
       Assert.assertNotNull(e);
     }
   }
-
-  @Test
-  public void testMicroserviceMetaManager() throws Exception {
-    MicroserviceMetaManager microserviceMetaManager = new MicroserviceMetaManager();
-    microserviceMetaManager.getOrCreateMicroserviceMeta("app:testname");
-
-    Assert.assertEquals("microservice meta manager", microserviceMetaManager.getName());
-    Assert.assertEquals("Not allow register repeat data, name=%s, key=%s",
-        microserviceMetaManager.getRegisterErrorFmt());
-    Assert.assertEquals(0, microserviceMetaManager.getAllSchemaMeta("app:testname").size());
-
-    Swagger oSwagger = new Swagger();
-    Info oInfo = new Info();
-    oInfo.setVendorExtension("x-java-interface", "java.lang.String");
-    oSwagger.setInfo(oInfo);
-    Assert.assertEquals("java.lang.String",
-        (ClassUtils.getInterfaceName(oSwagger.getInfo().getVendorExtensions())));
-    oInfo.setVendorExtension("x-java-class", "java.lang.String");
-  }
 }
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java b/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
index c7f0b4a..2ed4fae 100644
--- a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
+++ b/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
@@ -20,7 +20,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 
 import org.apache.servicecomb.core.CseContext;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.unittest.UnitTestMeta;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
@@ -35,7 +35,6 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestDynamicSchemaLoader {
-  private static MicroserviceMetaManager microserviceMetaManager = new MicroserviceMetaManager();
 
   private static SchemaLoader loader = new SchemaLoader();
 
@@ -44,7 +43,6 @@ public class TestDynamicSchemaLoader {
   @BeforeClass
   public static void init() {
     new UnitTestMeta();
-    loader.setMicroserviceMetaManager(microserviceMetaManager);
 
     SchemaListenerManager schemaListenerManager = new SchemaListenerManager();
     schemaListenerManager.setSchemaListenerList(Collections.emptyList());
@@ -69,16 +67,21 @@ public class TestDynamicSchemaLoader {
   @Test
   public void testRegisterSchemas() {
     DynamicSchemaLoader.INSTANCE.registerSchemas("classpath*:test/test/schema.yaml");
-    SchemaMeta schemaMeta = microserviceMetaManager.ensureFindSchemaMeta("perfClient", "schema");
+    SchemaMeta schemaMeta = SCBEngine.getInstance().getProducerMicroMeta().ensureFindSchemaMeta("schema");
     Assert.assertEquals("cse.gen.app.perfClient.schema", schemaMeta.getPackageName());
   }
 
   @SuppressWarnings("deprecation")
   @Test
   public void testRegisterShemasAcrossApp() {
+    //we can not register repeat data
+    init();
+    //as we can not set microserviceName any more, hence we should use the default name
     DynamicSchemaLoader.INSTANCE.registerSchemas("CSE:as", "classpath*:test/test/schema.yaml");
-    SchemaMeta schemaMeta = microserviceMetaManager.ensureFindSchemaMeta("CSE:as", "schema");
-    Assert.assertEquals("cse.gen.CSE.as.schema", schemaMeta.getPackageName());
+    SchemaMeta schemaMeta =
+        SCBEngine.getInstance().getProducerMicroMeta().ensureFindSchemaMeta("schema");
+    System.out.println(schemaMeta.getPackageName());
+    Assert.assertEquals("cse.gen.app.perfClient.schema", schemaMeta.getPackageName());
   }
 
   @Test
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestSchemaListenerManager.java b/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestSchemaListenerManager.java
index f32adff..445cf1a 100644
--- a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestSchemaListenerManager.java
+++ b/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestSchemaListenerManager.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.core.definition.loader;
 
 import java.util.Arrays;
 
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.junit.Assert;
 import org.junit.Before;
@@ -47,7 +46,6 @@ public class TestSchemaListenerManager {
 
     SchemaListenerManager mgr = new SchemaListenerManager();
     mgr.setSchemaListenerList(Arrays.asList(listener));
-    mgr.setMicroserviceMetaManager(new MicroserviceMetaManager());
 
     mgr.notifySchemaListener(schemaMeta);
   }
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/schema/TestProducerSchemaFactory.java b/core/src/test/java/org/apache/servicecomb/core/definition/schema/TestProducerSchemaFactory.java
index 97f7ddb..fa1ea6b 100644
--- a/core/src/test/java/org/apache/servicecomb/core/definition/schema/TestProducerSchemaFactory.java
+++ b/core/src/test/java/org/apache/servicecomb/core/definition/schema/TestProducerSchemaFactory.java
@@ -16,15 +16,13 @@
  */
 package org.apache.servicecomb.core.definition.schema;
 
+import javax.xml.ws.Holder;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
 
-import javax.xml.ws.Holder;
-
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.Invocation;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.definition.loader.SchemaLoader;
@@ -50,10 +48,11 @@ import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import io.swagger.models.Swagger;
 import mockit.Mock;
 import mockit.MockUp;
 
+import io.swagger.models.Swagger;
+
 public class TestProducerSchemaFactory {
   private static SwaggerEnvironment swaggerEnv = new BootstrapNormal().boot();
 
@@ -77,12 +76,10 @@ public class TestProducerSchemaFactory {
     ProducerArgumentsMapperFactory producerArgsMapperFactory = new ProducerArgumentsMapperFactory();
     producerArgsMapperFactory.setConverterMgr(converterMgr);
 
-    MicroserviceMetaManager microserviceMetaManager = new MicroserviceMetaManager();
     SchemaLoader schemaLoader = new SchemaLoader();
     CompositeSwaggerGeneratorContext compositeSwaggerGeneratorContext = new CompositeSwaggerGeneratorContext();
 
     producerSchemaFactory.setSwaggerEnv(swaggerEnv);
-    ReflectUtils.setField(producerSchemaFactory, "microserviceMetaManager", microserviceMetaManager);
     ReflectUtils.setField(producerSchemaFactory, "schemaLoader", schemaLoader);
     ReflectUtils.setField(producerSchemaFactory,
         "compositeSwaggerGeneratorContext",
@@ -93,8 +90,7 @@ public class TestProducerSchemaFactory {
     };
     new MockUp<BeanUtils>() {
       @SuppressWarnings("unchecked")
-      @Mock
-      <T> T getBean(String name) {
+      @Mock <T> T getBean(String name) {
         if (ExecutorManager.EXECUTOR_REACTIVE.equals(name)) {
           return (T) reactiveExecutor;
         }
@@ -111,8 +107,7 @@ public class TestProducerSchemaFactory {
 
   @Test
   public void testGetOrCreateProducer() throws Exception {
-    SchemaMeta schemaMeta = producerSchemaFactory.getOrCreateProducerSchema("app:ms",
-        "schema",
+    SchemaMeta schemaMeta = producerSchemaFactory.getOrCreateProducerSchema("app:ms", "schema",
         TestProducerSchemaFactoryImpl.class,
         new TestProducerSchemaFactoryImpl());
     Swagger swagger = schemaMeta.getSwagger();
@@ -121,8 +116,8 @@ public class TestProducerSchemaFactory {
     Assert.assertEquals("add", operationMeta.getOperationId());
 
     SwaggerProducerOperation producerOperation = operationMeta.getExtData(Const.PRODUCER_OPERATION);
-
-    Object addBody = Class.forName("cse.gen.app.ms.schema.addBody").newInstance();
+    //we can not set microserviceName any more,use the default name
+    Object addBody = Class.forName("cse.gen.app.perfClient.schema.addBody").newInstance();
     ReflectUtils.setField(addBody, "x", 1);
     ReflectUtils.setField(addBody, "y", 2);
     Invocation invocation = new Invocation((Endpoint) null, operationMeta, new Object[] {addBody}) {
@@ -152,8 +147,7 @@ public class TestProducerSchemaFactory {
     ArchaiusUtils.setProperty(org.apache.servicecomb.serviceregistry.api.Const.REGISTER_URL_PREFIX, "true");
     System.setProperty(org.apache.servicecomb.serviceregistry.api.Const.URL_PREFIX, "/pojo/test");
 
-    SchemaMeta schemaMeta = producerSchemaFactory.getOrCreateProducerSchema("app:ms",
-        "schema2",
+    SchemaMeta schemaMeta = producerSchemaFactory.getOrCreateProducerSchema("app:ms", "schema2",
         TestProducerSchemaFactoryImpl.class,
         new TestProducerSchemaFactoryImpl());
     OperationMeta operationMeta = schemaMeta.ensureFindOperation("add");
@@ -167,8 +161,7 @@ public class TestProducerSchemaFactory {
 
   @Test
   public void testCompletableFuture() {
-    SchemaMeta schemaMeta = producerSchemaFactory.getOrCreateProducerSchema("app:ms",
-        "schema3",
+    SchemaMeta schemaMeta = producerSchemaFactory.getOrCreateProducerSchema("app:ms", "schema3",
         TestProducerSchemaFactoryImpl.class,
         new TestProducerSchemaFactoryImpl());
     OperationMeta operationMeta = schemaMeta.ensureFindOperation("async");
diff --git a/core/src/test/java/org/apache/servicecomb/core/provider/producer/TestProducerProviderManager.java b/core/src/test/java/org/apache/servicecomb/core/provider/producer/TestProducerProviderManager.java
index 0809f93..943183a 100644
--- a/core/src/test/java/org/apache/servicecomb/core/provider/producer/TestProducerProviderManager.java
+++ b/core/src/test/java/org/apache/servicecomb/core/provider/producer/TestProducerProviderManager.java
@@ -26,7 +26,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.servicecomb.core.BootListener.BootEvent;
 import org.apache.servicecomb.core.BootListener.EventType;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.executor.FixedThreadExecutor;
 import org.apache.servicecomb.foundation.test.scaffolding.log.LogCollector;
@@ -42,9 +41,8 @@ import mockit.Mocked;
 
 public class TestProducerProviderManager {
   @Test
-  public void allowedNoProvider(@Mocked MicroserviceMetaManager microserviceMetaManager) {
+  public void allowedNoProvider() {
     AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
-    context.getBeanFactory().registerSingleton(microserviceMetaManager.getClass().getName(), microserviceMetaManager);
     context.register(ProducerProviderManager.class);
     // must not throw exception
     context.refresh();
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerTestsAfterBootup.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerTestsAfterBootup.java
index ce80bf8..f6c9107 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerTestsAfterBootup.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerTestsAfterBootup.java
@@ -47,20 +47,22 @@ public class ProducerTestsAfterBootup implements BootListener {
 
   public void testSchemaNotChange() {
     LOGGER.info("ProducerTestsAfterBootup testing start");
+    //we can not set microserviceName any more
     SchemaMeta meta =
-        factory.getOrCreateProducerSchema("customer-service",
-            "test1",
+        factory.getOrCreateProducerSchema("customer-service", "test1",
             CodeFirstSpringmvcForSchema.class,
             new CodeFirstSpringmvcForSchema());
     String codeFirst = getSwaggerContent(meta.getSwagger());
-    TestMgr.check("4d18e9b339136d68c7e5e83f4f302664c91465d9747a36334841e082d336516e",
+    TestMgr.check("2986daa46b229ec125443122dd7b51ee9a64879f1750d0996f948ce0718685c7",
         RegistryUtils.calcSchemaSummary(codeFirst));
-    TestMgr.check(codeFirst.length(), 896);
+    TestMgr.check(codeFirst.length(), 889);
+
   }
 
   public void testRegisterPath() {
     TestMgr.check(RegistryUtils.getMicroservice().getPaths().size(), 10);
   }
+
   private String getSwaggerContent(Swagger swagger) {
     try {
       return writer.writeValueAsString(swagger);
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java
index 7d9b1f2..14cb7f8 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java
@@ -22,9 +22,8 @@ import java.util.Map.Entry;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ThreadPoolExecutor;
 
-import org.apache.servicecomb.core.CseContext;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.executor.FixedThreadExecutor;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
@@ -71,14 +70,11 @@ public class ThreadPoolMetersInitializer implements MetricsInitializer {
 
   protected Map<Executor, Executor> collectionOperationExecutors() {
     Map<Executor, Executor> operationExecutors = new IdentityHashMap<>();
-
-    MicroserviceMetaManager microserviceMetaManager = CseContext.getInstance().getMicroserviceMetaManager();
-    for (MicroserviceMeta microserviceMeta : microserviceMetaManager.values()) {
-      for (OperationMeta operationMeta : microserviceMeta.getOperations()) {
-        operationExecutors.put(operationMeta.getExecutor(), operationMeta.getExecutor());
-      }
+    //only one instance in the values
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
+    for (OperationMeta operationMeta : microserviceMeta.getOperations()) {
+      operationExecutors.put(operationMeta.getExecutor(), operationMeta.getExecutor());
     }
-
     return operationExecutors;
   }
 
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java
index 116e059..c051dc5 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java
@@ -28,8 +28,8 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.ThreadPoolExecutor;
 
 import org.apache.servicecomb.core.CseContext;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.executor.FixedThreadExecutor;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
@@ -43,7 +43,6 @@ import org.springframework.context.ApplicationContext;
 import com.netflix.spectator.api.DefaultRegistry;
 import com.netflix.spectator.api.ManualClock;
 import com.netflix.spectator.api.Registry;
-
 import mockit.Expectations;
 import mockit.Mock;
 import mockit.MockUp;
@@ -72,8 +71,6 @@ public class TestThreadPoolMetersInitializer {
   @Mocked
   ApplicationContext applicationContext;
 
-  @Mocked
-  MicroserviceMetaManager microserviceMetaManager;
 
   @Mocked
   MicroserviceMeta microserviceMeta;
@@ -89,6 +86,12 @@ public class TestThreadPoolMetersInitializer {
 
   @Test
   public void init() {
+    new Expectations(SCBEngine.class) {
+      {
+        SCBEngine.getInstance().getProducerMicroMeta();
+        result = microserviceMeta;
+      }
+    };
     new Expectations(SPIServiceUtils.class) {
       {
         SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class);
@@ -97,7 +100,6 @@ public class TestThreadPoolMetersInitializer {
         result = registry;
       }
     };
-
     Map<String, Executor> beanExecutors = new HashMap<>();
     beanExecutors.put("executor", executor);
     beanExecutors.put("fixedThreadExecutor", fixedThreadExecutor);
@@ -113,10 +115,6 @@ public class TestThreadPoolMetersInitializer {
 
     new Expectations(CseContext.getInstance()) {
       {
-        CseContext.getInstance().getMicroserviceMetaManager();
-        result = microserviceMetaManager;
-        microserviceMetaManager.values();
-        result = Arrays.asList(microserviceMeta);
         microserviceMeta.getOperations();
         result = Arrays.asList(operationMetaExecutor, operationMetaSameExecutor, operationMetaFixedThreadExecutor);
         operationMetaExecutor.getExecutor();
diff --git a/providers/provider-pojo/src/test/java/org/apache/servicecomb/provider/common/MockUtil.java b/providers/provider-pojo/src/test/java/org/apache/servicecomb/provider/common/MockUtil.java
index bea8107..d3e46c0 100644
--- a/providers/provider-pojo/src/test/java/org/apache/servicecomb/provider/common/MockUtil.java
+++ b/providers/provider-pojo/src/test/java/org/apache/servicecomb/provider/common/MockUtil.java
@@ -17,7 +17,6 @@
 
 package org.apache.servicecomb.provider.common;
 
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
 import org.mockito.Mockito;
 import org.springframework.context.ApplicationContext;
@@ -26,7 +25,6 @@ import mockit.Mock;
 import mockit.MockUp;
 
 public class MockUtil {
-  MicroserviceMetaManager microserviceMetaManager = new MicroserviceMetaManager();
 
   private static MockUtil instance = new MockUtil();
 
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
index fd82cca..d19ec8b 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
@@ -23,11 +23,10 @@ import org.apache.servicecomb.codec.protobuf.definition.OperationProtobuf;
 import org.apache.servicecomb.codec.protobuf.definition.ProtobufManager;
 import org.apache.servicecomb.codec.protobuf.utils.WrapSchema;
 import org.apache.servicecomb.core.Const;
-import org.apache.servicecomb.core.CseContext;
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.invocation.InvocationFactory;
@@ -45,8 +44,6 @@ import io.vertx.core.buffer.Buffer;
 public class HighwayServerInvoke {
   private static final Logger LOGGER = LoggerFactory.getLogger(HighwayServerInvoke.class);
 
-  private MicroserviceMetaManager microserviceMetaManager = CseContext.getInstance().getMicroserviceMetaManager();
-
   private ProtobufFeature protobufFeature;
 
   private RequestHeader header;
@@ -74,10 +71,6 @@ public class HighwayServerInvoke {
     this.protobufFeature = protobufFeature;
   }
 
-  public void setMicroserviceMetaManager(MicroserviceMetaManager microserviceMetaManager) {
-    this.microserviceMetaManager = microserviceMetaManager;
-  }
-
   public boolean init(TcpConnection connection, long msgId,
       RequestHeader header, Buffer bodyBuffer) {
     try {
@@ -103,7 +96,7 @@ public class HighwayServerInvoke {
     this.msgId = msgId;
     this.header = header;
 
-    MicroserviceMeta microserviceMeta = microserviceMetaManager.ensureFindValue(header.getDestMicroservice());
+    MicroserviceMeta microserviceMeta = SCBEngine.getInstance().getProducerMicroMeta();
     SchemaMeta schemaMeta = microserviceMeta.ensureFindSchemaMeta(header.getSchemaId());
     this.operationMeta = schemaMeta.ensureFindOperation(header.getOperationName());
     this.operationProtobuf = ProtobufManager.getOrCreateOperation(operationMeta);
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerConnection.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerConnection.java
index 4f49fbc..1d2783f 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerConnection.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerConnection.java
@@ -16,17 +16,16 @@
  */
 package org.apache.servicecomb.transport.highway;
 
+import javax.xml.ws.Holder;
 import java.net.InetSocketAddress;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import javax.xml.ws.Holder;
-
 import org.apache.servicecomb.codec.protobuf.definition.ProtobufManager;
 import org.apache.servicecomb.codec.protobuf.utils.WrapSchema;
 import org.apache.servicecomb.core.CseContext;
 import org.apache.servicecomb.core.Endpoint;
+import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
-import org.apache.servicecomb.core.definition.MicroserviceMetaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.foundation.vertx.stream.BufferOutputStream;
@@ -36,16 +35,17 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
+import mockit.Expectations;
+import mockit.Mock;
+import mockit.MockUp;
+import mockit.Mocked;
+
 import io.protostuff.LinkedBuffer;
 import io.protostuff.ProtobufOutput;
 import io.vertx.core.buffer.Buffer;
 import io.vertx.core.net.NetSocket;
 import io.vertx.core.net.impl.NetSocketImpl;
 import io.vertx.core.net.impl.SocketAddressImpl;
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
 
 public class TestHighwayServerConnection {
   private static WrapSchema requestHeaderSchema =
@@ -57,9 +57,6 @@ public class TestHighwayServerConnection {
   HighwayServerConnection connection;
 
   @Mocked
-  MicroserviceMetaManager microserviceMetaManager;
-
-  @Mocked
   Endpoint endpoint;
 
   @Mocked
@@ -147,15 +144,14 @@ public class TestHighwayServerConnection {
     Buffer headerBuffer = createBuffer(requestHeaderSchema, header);
 
     Buffer bodyBuffer = Buffer.buffer();
-
-    new Expectations(CseContext.getInstance()) {
+    new Expectations(SCBEngine.class) {
       {
-        CseContext.getInstance().getMicroserviceMetaManager();
-        result = microserviceMetaManager;
-
-        microserviceMetaManager.ensureFindValue(null);
+        SCBEngine.getInstance().getProducerMicroMeta();
         result = microserviceMeta;
-
+      }
+    };
+    new Expectations(CseContext.getInstance()) {
+      {
         microserviceMeta.ensureFindSchemaMeta(header.getSchemaId());
         result = schemaMeta;
       }
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
index 525b5e0..ecf8ddd 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
@@ -133,7 +133,7 @@ public class TestHighwayServerInvoke {
     operationMeta.setExecutor(new ReactiveExecutor());
 
     HighwayServerInvoke highwayServerInvoke = new HighwayServerInvoke();
-    highwayServerInvoke.setMicroserviceMetaManager(unitTestMeta.getMicroserviceMetaManager());
+//    highwayServerInvoke.setMicroserviceMetaManager(unitTestMeta.getMicroserviceMetaManager());
 
     RequestHeader requestHeader = MockUtil.getInstance().requestHeader;