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)
