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>() {