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 c5b84a80f65fba9f566a4263c25eb55d2e21930d
Author: heyile <[email protected]>
AuthorDate: Wed Oct 10 21:24:07 2018 +0800

    [SCB-837] make http2 production ready: modify http2 options and add env 
config for http2
---
 .../transport/rest/client/RestTransportClient.java    | 19 ++++++++++++++++---
 .../transport/rest/client/TransportClientConfig.java  | 16 ++++++++++++++--
 .../transport/rest/vertx/RestServerVerticle.java      |  4 +++-
 .../transport/rest/vertx/TransportConfig.java         |  8 +++++++-
 4 files changed, 40 insertions(+), 7 deletions(-)

diff --git 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java
 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java
index 05f73a7..2ce5620 100644
--- 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java
+++ 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java
@@ -61,9 +61,7 @@ public class RestTransportClient {
     HttpClientOptions httpClientOptions = createHttpClientOptions();
     clientMgr = new ClientPoolManager<>(vertx, new 
HttpClientPoolFactory(httpClientOptions));
 
-    HttpClientOptions httpClientOptionshttp2 = createHttpClientOptions();
-    
httpClientOptionshttp2.setUseAlpn(true).setProtocolVersion(HttpVersion.HTTP_2);
-    httpClientOptionshttp2.setHttp2ClearTextUpgrade(false);
+    HttpClientOptions httpClientOptionshttp2 = createHttp2ClientOptions();
 
     clientMgrHttp2 = new ClientPoolManager<>(vertx, new 
HttpClientPoolFactory(httpClientOptionshttp2));
 
@@ -87,6 +85,21 @@ public class RestTransportClient {
     return httpClientOptions;
   }
 
+  private static HttpClientOptions createHttp2ClientOptions() {
+    HttpClientOptions httpClientOptions = new HttpClientOptions();
+    
httpClientOptions.setMaxPoolSize(TransportClientConfig.getConnectionMaxPoolSize())
+        .setUseAlpn(true)
+        
.setIdleTimeout(TransportClientConfig.getConnectionIdleTimeoutInSeconds())
+        
.setHttp2MultiplexingLimit(TransportClientConfig.getHttp2MultiplexingLimit())
+        
.setHttp2MaxPoolSize(TransportClientConfig.getHttp2ConnectionMaxPoolSize())
+        .setProtocolVersion(HttpVersion.HTTP_2)
+        .setHttp2ClearTextUpgrade(false)
+        
.setTryUseCompression(TransportClientConfig.getConnectionCompression());
+
+    VertxTLSBuilder.buildHttpClientOptions(SSL_KEY, httpClientOptions);
+    return httpClientOptions;
+  }
+
   public void send(Invocation invocation, AsyncResponse asyncResp) {
     URIEndpointObject endpoint = (URIEndpointObject) 
invocation.getEndpoint().getAddress();
     HttpClientWithContext httpClientWithContext;
diff --git 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
index 8a7844c..d3e82da 100644
--- 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
+++ 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
@@ -37,8 +37,19 @@ public final class TransportClientConfig {
     return 
DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.thread-count",
 1).get();
   }
 
+  public static int getHttp2ConnectionMaxPoolSize() {
+    return 
DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.http2.maxPoolSize",
 3)
+        .get();
+  }
+
+  public static int getHttp2MultiplexingLimit() {
+    return 
DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.http2.multiplexingLimit",
 -1)
+        .get();
+  }
+
   public static int getConnectionMaxPoolSize() {
-    return 
DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.connection.maxPoolSize",
 5).get();
+    return 
DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.connection.maxPoolSize",
 5)
+        .get();
   }
 
   public static int getConnectionIdleTimeoutInSeconds() {
@@ -48,7 +59,8 @@ public final class TransportClientConfig {
   }
 
   public static boolean getConnectionKeepAlive() {
-    return 
DynamicPropertyFactory.getInstance().getBooleanProperty("servicecomb.rest.client.connection.keepAlive",
 true).get();
+    return 
DynamicPropertyFactory.getInstance().getBooleanProperty("servicecomb.rest.client.connection.keepAlive",
 true)
+        .get();
   }
 
   public static boolean getConnectionCompression() {
diff --git 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
index e93c561..0d10f18 100644
--- 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
+++ 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
@@ -54,6 +54,7 @@ import io.vertx.core.Context;
 import io.vertx.core.Future;
 import io.vertx.core.Handler;
 import io.vertx.core.Vertx;
+import io.vertx.core.http.Http2Settings;
 import io.vertx.core.http.HttpMethod;
 import io.vertx.core.http.HttpServer;
 import io.vertx.core.http.HttpServerOptions;
@@ -253,7 +254,8 @@ public class RestServerVerticle extends AbstractVerticle {
     serverOptions.setMaxHeaderSize(TransportConfig.getMaxHeaderSize());
     
serverOptions.setMaxInitialLineLength(TransportConfig.getMaxInitialLineLength());
     if (endpointObject.isHttp2Enabled()) {
-      serverOptions.setUseAlpn(true);
+      serverOptions.setUseAlpn(true)
+          .setInitialSettings(new 
Http2Settings().setMaxConcurrentStreams(TransportConfig.getMaxConcurrentStreams()));
     }
     if (endpointObject.isSslEnabled()) {
       SSLOptionFactory factory =
diff --git 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java
 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java
index 2064722..c1efa59 100644
--- 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java
+++ 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java
@@ -38,6 +38,8 @@ public final class TransportConfig {
 
   public static final boolean DEFAULT_SERVER_COMPRESSION_SUPPORT = false;
 
+  public static final long DEFAULT_MAX_CONCURRENT_STREAMS = 200L;
+
   // 32K
   public static final int DEFAULT_SERVER_MAX_HEADER_SIZE = 32 * 1024;
 
@@ -81,7 +83,11 @@ public final class TransportConfig {
         .getBooleanProperty("servicecomb.rest.server.compression", 
DEFAULT_SERVER_COMPRESSION_SUPPORT)
         .get();
   }
-
+  public static long getMaxConcurrentStreams() {
+    return DynamicPropertyFactory.getInstance()
+        .getLongProperty("servicecomb.rest.server.http2.concurrentStreams", 
DEFAULT_MAX_CONCURRENT_STREAMS)
+        .get();
+  }
   public static int getMaxHeaderSize() {
     return DynamicPropertyFactory.getInstance()
         .getIntProperty("servicecomb.rest.server.maxHeaderSize", 
DEFAULT_SERVER_MAX_HEADER_SIZE)

Reply via email to