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 4ae248801e9e6012f34b76959b5c5bd30c8286d9 Author: heyile <[email protected]> AuthorDate: Thu Oct 18 19:07:40 2018 +0800 [SCB-837] make http2 production ready: add it-test and optimize detials --- .../vertx/metrics/DefaultHttpClientMetrics.java | 6 ------ .../org/apache/servicecomb/it/ConsumerMain.java | 20 ++++++++++++++++++ .../org/apache/servicecomb/it/deploy/Deploys.java | 24 ++++++++++++++++++++++ .../servicecomb/it/deploy/MicroserviceDeploy.java | 7 +++++-- .../transport/rest/client/RestTransportClient.java | 3 +-- .../rest/client/TransportClientConfig.java | 13 ++++++++---- 6 files changed, 59 insertions(+), 14 deletions(-) diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java index c184072..d8d5286 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java @@ -19,8 +19,6 @@ package org.apache.servicecomb.foundation.vertx.metrics; import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultClientEndpointMetric; import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultClientEndpointMetricManager; import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultHttpSocketMetric; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import io.vertx.core.http.HttpClient; import io.vertx.core.http.HttpClientOptions; @@ -37,8 +35,6 @@ import io.vertx.core.spi.metrics.HttpClientMetrics; public class DefaultHttpClientMetrics implements HttpClientMetrics<DefaultHttpSocketMetric, Object, DefaultHttpSocketMetric, DefaultClientEndpointMetric, Object> { - private static final Logger LOGGER = LoggerFactory.getLogger(DefaultHttpClientMetrics.class); - private final DefaultClientEndpointMetricManager clientEndpointMetricManager; private final HttpClient client; @@ -147,8 +143,6 @@ public class DefaultHttpClientMetrics implements DefaultClientEndpointMetric clientEndpointMetric = this.clientEndpointMetricManager .getClientEndpointMetric(remoteAddress); if (clientEndpointMetric == null) { - LOGGER.warn("can not find endpointMetric directly by remoteAddress {}, try again with remoteName {}", - remoteAddress, remoteName); SocketAddressImpl address = new SocketAddressImpl(remoteAddress.port(), remoteName); clientEndpointMetric = this.clientEndpointMetricManager.getClientEndpointMetric(address); } diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java index 1004eef..25f9e95 100644 --- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java +++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java @@ -107,6 +107,8 @@ public class ConsumerMain { testSpringBoot2Standalone(); testSpringBoot2Servlet(); + //http2 + testHttp2Standalone(); deploys.getEdge().stop(); } @@ -147,6 +149,24 @@ public class ConsumerMain { deploys.getBaseProducer().stop(); } + private static void testHttp2Standalone() throws Throwable { + deploys.getBaseHttp2Producer().ensureReady(); + + ITJUnitUtils.addProducer("it-producer"); + + runShareTestCases(); + + // currently not support update 3rd url, so only test once + ITJUnitUtils.run(Test3rdPartyInvocation.class); + + //as setMaxInitialLineLength() is not work for http2, do not need + // ITJUnitUtils.runWithRest(TestRestServerConfig.class) + ITJUnitUtils.run(TestRestServerConfigEdge.class); + + ITJUnitUtils.popProducer(); + deploys.getBaseHttp2Producer().stop(); + } + private static void testSpringBoot2Standalone() throws Throwable { deploys.getSpringBoot2StandaloneProducer().ensureReady(); diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java index fff46f5..4ba0e89 100644 --- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java +++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java @@ -38,6 +38,8 @@ public class Deploys { private MicroserviceDeploy baseProducer; + private MicroserviceDeploy baseHttp2Producer; + private MicroserviceDeploy springBoot2StandaloneProducer; private MicroserviceDeploy springBoot2ServletProducer; @@ -60,6 +62,10 @@ public class Deploys { return baseProducer; } + public MicroserviceDeploy getBaseHttp2Producer() { + return baseHttp2Producer; + } + public MicroserviceDeploy getSpringBoot2StandaloneProducer() { return springBoot2StandaloneProducer; } @@ -75,6 +81,7 @@ public class Deploys { serviceCenter = new ServiceCenterDeploy(); initEdge(); initBaseProducer(); + initBaseHttp2Producer(); initSpringBoot2StandaloneProducer(); initSpringBoot2ServletProducer(); // initZuul(); @@ -187,6 +194,23 @@ public class Deploys { baseProducer = new MicroserviceDeploy(definition); } + + private void initBaseHttp2Producer() { + MicroserviceDeployDefinition definition = new MicroserviceDeployDefinition(); + definition.setDeployName("baseHttp2Producer"); + definition.setCmd("it-producer"); + definition.setArgs(new String[] {}); + definition.setArgs(new String[] {"-Dservicecomb.rest.address=0.0.0.0:0?protocol=http2", + "-Dservicecomb.highway.address=0.0.0.0:0?protocol=http2"}); + definition.setAppId("integration-test"); + definition.setMicroserviceName("it-producer"); + definition.setVersion(DEFAULT_MICROSERVICE_VERSION); + + initDeployDefinition(definition); + + baseHttp2Producer = new MicroserviceDeploy(definition); + } + private void initSpringBoot2ServletProducer() { MicroserviceDeployDefinition definition = new MicroserviceDeployDefinition(); definition.setDeployName("springBoot2ServletProducer"); diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java index 2892c51..4561e81 100644 --- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java +++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java @@ -37,13 +37,16 @@ public class MicroserviceDeploy extends NormalDeploy { @Override protected String[] createCmds() { - return new String[] {"java", "-jar", deployDefinition.getCmd()}; + // must set jar at the end of the cmds + return new String[] {"java", "-jar"}; } @Override protected String[] addArgs(String[] cmds) { + // add jar return ArrayUtils.addAll(super.addArgs(cmds), - "-DselfController=" + RegistryUtils.getMicroserviceInstance().getInstanceId()); + "-DselfController=" + RegistryUtils.getMicroserviceInstance().getInstanceId(), + deployDefinition.getCmd()); } public void ensureReady() throws Throwable { 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 133c180..533179a 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 @@ -87,8 +87,7 @@ public class RestTransportClient { private static HttpClientOptions createHttp2ClientOptions() { HttpClientOptions httpClientOptions = new HttpClientOptions(); - httpClientOptions.setMaxPoolSize(TransportClientConfig.getConnectionMaxPoolSize()) - .setUseAlpn(TransportClientConfig.getUseAlpn()) + httpClientOptions.setUseAlpn(TransportClientConfig.getUseAlpn()) .setHttp2ClearTextUpgrade(false) .setProtocolVersion(HttpVersion.HTTP_2) .setIdleTimeout(TransportClientConfig.getHttp2ConnectionIdleTimeoutInSeconds()) 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 1efd952..fcc6195 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 @@ -20,6 +20,7 @@ package org.apache.servicecomb.transport.rest.client; import com.netflix.config.DynamicPropertyFactory; import io.vertx.core.http.HttpClientOptions; +import io.vertx.core.net.TCPSSLOptions; public final class TransportClientConfig { private static Class<? extends RestTransportClient> restTransportClientCls = RestTransportClient.class; @@ -53,10 +54,11 @@ public final class TransportClientConfig { public static int getHttp2ConnectionIdleTimeoutInSeconds() { return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.http2.idleTimeoutInSeconds", 0) + .getIntProperty("servicecomb.rest.client.http2.idleTimeoutInSeconds", TCPSSLOptions.DEFAULT_IDLE_TIMEOUT) .get(); } + public static boolean getUseAlpn() { return DynamicPropertyFactory.getInstance() .getBooleanProperty("servicecomb.rest.client.http2.useAlpnEnabled", true) @@ -64,7 +66,8 @@ public final class TransportClientConfig { } public static int getConnectionMaxPoolSize() { - return DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.connection.maxPoolSize", 5) + return DynamicPropertyFactory.getInstance() + .getIntProperty("servicecomb.rest.client.connection.maxPoolSize", HttpClientOptions.DEFAULT_MAX_POOL_SIZE) .get(); } @@ -75,14 +78,16 @@ public final class TransportClientConfig { } public static boolean getConnectionKeepAlive() { - return DynamicPropertyFactory.getInstance().getBooleanProperty("servicecomb.rest.client.connection.keepAlive", true) + return DynamicPropertyFactory.getInstance() + .getBooleanProperty("servicecomb.rest.client.connection.keepAlive", HttpClientOptions.DEFAULT_KEEP_ALIVE) .get(); } public static boolean getConnectionCompression() { return DynamicPropertyFactory.getInstance() - .getBooleanProperty("servicecomb.rest.client.connection.compression", false) + .getBooleanProperty("servicecomb.rest.client.connection.compression", + HttpClientOptions.DEFAULT_TRY_USE_COMPRESSION) .get(); } }
