You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by gu...@apache.org on 2021/09/07 03:05:42 UTC

[dubbo] branch 3.0 updated: #8685 supported to configure HTTP2 settings (#8700)

This is an automated email from the ASF dual-hosted git repository.

guohao pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new bdd253f  #8685 supported to configure HTTP2 settings (#8700)
bdd253f is described below

commit bdd253f8eeea0e256e2e037aa867b272de442625
Author: ukuz90 <zh...@gmail.com>
AuthorDate: Tue Sep 7 11:05:07 2021 +0800

    #8685 supported to configure HTTP2 settings (#8700)
---
 .../main/java/org/apache/dubbo/rpc/Constants.java  |  7 +++++
 .../rpc/protocol/tri/TripleHttp2Protocol.java      | 32 ++++++++++++++++------
 2 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Constants.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Constants.java
index a544fa4..975f9bf 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Constants.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Constants.java
@@ -94,4 +94,11 @@ public interface Constants {
     String SERIALIZATION_SECURITY_CHECK_KEY = "serialization.security.check";
     String INVOCATION_KEY = "invocation";
     String SERIALIZATION_ID_KEY = "serialization_id";
+
+    String H2_SETTINGS_HEADER_TABLE_SIZE_KEY = "h2.settings.header-table-size";
+    String H2_SETTINGS_ENABLE_PUSH_KEY = "h2.settings.enable-push";
+    String H2_SETTINGS_MAX_CONCURRENT_STREAMS_KEY = "h2.settings.max-concurrent-streams";
+    String H2_SETTINGS_INITIAL_WINDOW_SIZE_KEY = "h2.settings.initial-window-size";
+    String H2_SETTINGS_MAX_FRAME_SIZE_KEY = "h2.settings.max-frame-size";
+    String H2_SETTINGS_MAX_HEADER_LIST_SIZE_KEY = "h2.settings.max-header-list-size";
 }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java
index 5bcc96d..ccecde3 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java
@@ -16,6 +16,8 @@
  */
 package org.apache.dubbo.rpc.protocol.tri;
 
+import org.apache.dubbo.common.config.Configuration;
+import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.extension.Activate;
 import org.apache.dubbo.remoting.api.Http2WireProtocol;
 import org.apache.dubbo.rpc.model.FrameworkModel;
@@ -30,6 +32,13 @@ import io.netty.handler.codec.http2.Http2MultiplexHandler;
 import io.netty.handler.codec.http2.Http2Settings;
 import io.netty.handler.ssl.SslContext;
 
+import static org.apache.dubbo.rpc.Constants.H2_SETTINGS_ENABLE_PUSH_KEY;
+import static org.apache.dubbo.rpc.Constants.H2_SETTINGS_HEADER_TABLE_SIZE_KEY;
+import static org.apache.dubbo.rpc.Constants.H2_SETTINGS_INITIAL_WINDOW_SIZE_KEY;
+import static org.apache.dubbo.rpc.Constants.H2_SETTINGS_MAX_CONCURRENT_STREAMS_KEY;
+import static org.apache.dubbo.rpc.Constants.H2_SETTINGS_MAX_FRAME_SIZE_KEY;
+import static org.apache.dubbo.rpc.Constants.H2_SETTINGS_MAX_HEADER_LIST_SIZE_KEY;
+
 @Activate
 public class TripleHttp2Protocol extends Http2WireProtocol implements ScopeModelAware {
     private FrameworkModel frameworkModel;
@@ -46,13 +55,15 @@ public class TripleHttp2Protocol extends Http2WireProtocol implements ScopeModel
 
     @Override
     public void configServerPipeline(ChannelPipeline pipeline, SslContext sslContext) {
+        final Configuration config = ConfigurationUtils.getGlobalConfiguration();
         final Http2FrameCodec codec = Http2FrameCodecBuilder.forServer()
                 .gracefulShutdownTimeoutMillis(10000)
                 .initialSettings(new Http2Settings()
-                        .maxHeaderListSize(8192)
-                        .maxFrameSize(2 << 16)
-                        .maxConcurrentStreams(Integer.MAX_VALUE)
-                        .initialWindowSize(1048576))
+                    .headerTableSize(config.getInt(H2_SETTINGS_HEADER_TABLE_SIZE_KEY, 4096))
+                    .maxConcurrentStreams(config.getInt(H2_SETTINGS_MAX_CONCURRENT_STREAMS_KEY, Integer.MAX_VALUE))
+                    .initialWindowSize(config.getInt(H2_SETTINGS_INITIAL_WINDOW_SIZE_KEY, 1 << 20))
+                    .maxFrameSize(config.getInt(H2_SETTINGS_MAX_FRAME_SIZE_KEY, 2 << 14))
+                    .maxHeaderListSize(config.getInt(H2_SETTINGS_MAX_HEADER_LIST_SIZE_KEY, 8192)))
                 .frameLogger(SERVER_LOGGER)
                 .build();
         final Http2MultiplexHandler handler = new Http2MultiplexHandler(new TripleServerInitializer(frameworkModel));
@@ -67,13 +78,16 @@ public class TripleHttp2Protocol extends Http2WireProtocol implements ScopeModel
 
     @Override
     public void configClientPipeline(ChannelPipeline pipeline, SslContext sslContext) {
+        final Configuration config = ConfigurationUtils.getGlobalConfiguration();
         final Http2FrameCodec codec = Http2FrameCodecBuilder.forClient()
-                .initialSettings(new Http2Settings()
-                        .maxHeaderListSize(8192)
-                        .maxFrameSize(2 << 16)
-                        .maxConcurrentStreams(Integer.MAX_VALUE)
-                        .initialWindowSize(1048576))
                 .gracefulShutdownTimeoutMillis(10000)
+                .initialSettings(new Http2Settings()
+                    .headerTableSize(config.getInt(H2_SETTINGS_HEADER_TABLE_SIZE_KEY, 4096))
+                    .pushEnabled(config.getBoolean(H2_SETTINGS_ENABLE_PUSH_KEY, false))
+                    .maxConcurrentStreams(config.getInt(H2_SETTINGS_MAX_CONCURRENT_STREAMS_KEY, Integer.MAX_VALUE))
+                    .initialWindowSize(config.getInt(H2_SETTINGS_INITIAL_WINDOW_SIZE_KEY, 1 << 20))
+                    .maxFrameSize(config.getInt(H2_SETTINGS_MAX_FRAME_SIZE_KEY, 2 << 14))
+                    .maxHeaderListSize(config.getInt(H2_SETTINGS_MAX_HEADER_LIST_SIZE_KEY, 8192)))
                 .frameLogger(CLIENT_LOGGER)
                 .build();
         final Http2MultiplexHandler handler = new Http2MultiplexHandler(new SimpleChannelInboundHandler<Object>() {