diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ServletConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ServletConfig.java index 4de93cbfdba..1c3f84020d7 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ServletConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ServletConfig.java @@ -31,7 +31,8 @@ public class ServletConfig implements Serializable { /** * Maximum concurrent streams. *

For HTTP/2 - *

The default value is {@link Integer#MAX_VALUE}. + *

Note that the default value for tomcat is 20. Highly recommended to change it to {@link Integer#MAX_VALUE} + *

If set to a negative number, the actual value will be set to {@link Integer#MAX_VALUE}. */ private Integer maxConcurrentStreams; diff --git a/dubbo-spring-boot/dubbo-spring-boot-3-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTriple3AutoConfiguration.java b/dubbo-spring-boot/dubbo-spring-boot-3-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTriple3AutoConfiguration.java index 52db14fe466..4e1669fc61f 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-3-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTriple3AutoConfiguration.java +++ b/dubbo-spring-boot/dubbo-spring-boot-3-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTriple3AutoConfiguration.java @@ -44,7 +44,7 @@ public class DubboTriple3AutoConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnClass(Filter.class) @ConditionalOnWebApplication(type = Type.SERVLET) - @ConditionalOnProperty(prefix = PREFIX, name = "enabled") + @ConditionalOnProperty(prefix = PREFIX, name = "enabled", havingValue = "true") public static class TripleServletConfiguration { @Bean @@ -62,15 +62,17 @@ public FilterRegistrationBean tripleProtocolFilter( @Bean @ConditionalOnClass(Http2Protocol.class) - WebServerFactoryCustomizer tripleTomcatHttp2Customizer( - @Value("${" + PREFIX + ".max-concurrent-streams:2147483647}") int maxConcurrentStreams) { + @ConditionalOnProperty(prefix = PREFIX, name = "max-concurrent-streams") + public WebServerFactoryCustomizer tripleTomcatHttp2Customizer( + @Value("${" + PREFIX + ".max-concurrent-streams}") int maxConcurrentStreams) { return factory -> factory.addConnectorCustomizers(connector -> { ProtocolHandler handler = connector.getProtocolHandler(); for (UpgradeProtocol upgradeProtocol : handler.findUpgradeProtocols()) { if (upgradeProtocol instanceof Http2Protocol) { Http2Protocol protocol = (Http2Protocol) upgradeProtocol; - protocol.setMaxConcurrentStreams(maxConcurrentStreams); - protocol.setMaxConcurrentStreamExecution(maxConcurrentStreams); + int value = maxConcurrentStreams < 0 ? Integer.MAX_VALUE : maxConcurrentStreams; + protocol.setMaxConcurrentStreams(value); + protocol.setMaxConcurrentStreamExecution(value); } } }); diff --git a/dubbo-spring-boot/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTripleAutoConfiguration.java b/dubbo-spring-boot/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTripleAutoConfiguration.java index 06ad57da535..296cb6e83bf 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTripleAutoConfiguration.java +++ b/dubbo-spring-boot/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboTripleAutoConfiguration.java @@ -45,7 +45,7 @@ public class DubboTripleAutoConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnClass(Filter.class) @ConditionalOnWebApplication(type = Type.SERVLET) - @ConditionalOnProperty(prefix = PREFIX, name = "enabled") + @ConditionalOnProperty(prefix = PREFIX, name = "enabled", havingValue = "true") public static class TripleServletConfiguration { @Bean @@ -63,15 +63,17 @@ public FilterRegistrationBean tripleProtocolFilter( @Bean @ConditionalOnClass(Http2Protocol.class) - WebServerFactoryCustomizer tripleTomcatHttp2Customizer( - @Value("${" + PREFIX + ".max-concurrent-streams:2147483647}") int maxConcurrentStreams) { + @ConditionalOnProperty(prefix = PREFIX, name = "max-concurrent-streams") + public WebServerFactoryCustomizer tripleTomcatHttp2Customizer( + @Value("${" + PREFIX + ".max-concurrent-streams}") int maxConcurrentStreams) { return factory -> factory.addConnectorCustomizers(connector -> { ProtocolHandler handler = connector.getProtocolHandler(); for (UpgradeProtocol upgradeProtocol : handler.findUpgradeProtocols()) { if (upgradeProtocol instanceof Http2Protocol) { Http2Protocol protocol = (Http2Protocol) upgradeProtocol; - protocol.setMaxConcurrentStreams(maxConcurrentStreams); - protocol.setMaxConcurrentStreamExecution(maxConcurrentStreams); + int value = maxConcurrentStreams < 0 ? Integer.MAX_VALUE : maxConcurrentStreams; + protocol.setMaxConcurrentStreams(value); + protocol.setMaxConcurrentStreamExecution(value); } } });