[SCB-2315]transport event loop size configurable (#2496)

diff --git a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/Application.java b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/Application.java
index a657a70..30e4b5b 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/Application.java
+++ b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/Application.java
@@ -44,12 +44,24 @@
   public static void runTest() throws Exception {
     CategorizedTestCaseRunner.runCategorizedTestCase("demo-multi-service-center-serverA");
     testRegistryThreads();
+    testTransportThreads();
     TestMgr.summary();
     if (!TestMgr.errors().isEmpty()) {
       throw new IllegalStateException("tests failed");
     }
   }
 
+  private static void testTransportThreads() throws Exception {
+    Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
+    List<String> expectedThread = new ArrayList<>();
+    threadSet.forEach(thread -> {
+      if (thread.getName().contains("transport-")) {
+        expectedThread.add(thread.getName());
+      }
+    });
+    TestMgr.check(6, expectedThread.size());
+  }
+
   private static void testRegistryThreads() throws Exception {
     Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
     List<String> expectedThread = new ArrayList<>();
diff --git a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/resources/application.yml b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/resources/application.yml
index 6fbd422..4999ed0 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/resources/application.yml
+++ b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/resources/application.yml
@@ -30,4 +30,8 @@
   handler:
     chain:
       Consumer:
-        default: loadbalance
\ No newline at end of file
+        default: loadbalance
+
+  transport:
+    eventloop:
+      size: 6
\ No newline at end of file
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/SharedVertxFactory.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/SharedVertxFactory.java
index 7d45890..5e35641 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/SharedVertxFactory.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/SharedVertxFactory.java
@@ -19,6 +19,8 @@
 import org.apache.servicecomb.foundation.vertx.metrics.DefaultVertxMetricsFactory;
 import org.apache.servicecomb.foundation.vertx.metrics.MetricsOptionsEx;
 
+import com.netflix.config.DynamicPropertyFactory;
+
 import io.vertx.core.Vertx;
 import io.vertx.core.VertxOptions;
 import io.vertx.core.shareddata.Shareable;
@@ -33,6 +35,15 @@
 
     public SharedVertxInfo() {
       vertxOptions.setMetricsOptions(metricsOptionsEx);
+      vertxOptions.setEventLoopPoolSize(readEventLoopPoolSize("servicecomb.transport.eventloop.size"));
+    }
+
+    private static int readEventLoopPoolSize(String key) {
+      int count = DynamicPropertyFactory.getInstance().getIntProperty(key, -1).get();
+      if (count > 0) {
+        return count;
+      }
+      return VertxOptions.DEFAULT_EVENT_LOOP_POOL_SIZE;
     }
   }