diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/Constants.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/Constants.java index df8e5dcb45..9920ab126a 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/Constants.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/Constants.java @@ -143,6 +143,7 @@ public interface Constants { String DEFAULT_PROMPT = "dubbo>"; String TELNET_KEY = "telnet"; String HEARTBEAT_KEY = "heartbeat"; + String HEARTBEAT_CONFIG_KEY = "dubbo.protocol.default-heartbeat"; int DEFAULT_HEARTBEAT = 60 * 1000; String HEARTBEAT_TIMEOUT_KEY = "heartbeat.timeout"; String CONNECTIONS_KEY = "connections"; diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/utils/UrlUtils.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/utils/UrlUtils.java index 56b8bac3a9..fe620b613f 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/utils/UrlUtils.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/utils/UrlUtils.java @@ -47,7 +47,16 @@ public class UrlUtils { } public static int getHeartbeat(URL url) { - return url.getParameter(Constants.HEARTBEAT_KEY, Constants.DEFAULT_HEARTBEAT); + String configuredHeartbeat = System.getProperty(Constants.HEARTBEAT_CONFIG_KEY); + int defaultHeartbeat = Constants.DEFAULT_HEARTBEAT; + if (StringUtils.isNotEmpty(configuredHeartbeat)) { + try { + defaultHeartbeat = Integer.parseInt(configuredHeartbeat); + } catch (NumberFormatException e) { + // use default heartbeat + } + } + return url.getParameter(Constants.HEARTBEAT_KEY, defaultHeartbeat); } /** diff --git a/dubbo-remoting/dubbo-remoting-api/src/test/java/org/apache/dubbo/remoting/utils/UrlUtilsTest.java b/dubbo-remoting/dubbo-remoting-api/src/test/java/org/apache/dubbo/remoting/utils/UrlUtilsTest.java index 40460c470e..2ba6f2b506 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/test/java/org/apache/dubbo/remoting/utils/UrlUtilsTest.java +++ b/dubbo-remoting/dubbo-remoting-api/src/test/java/org/apache/dubbo/remoting/utils/UrlUtilsTest.java @@ -17,6 +17,7 @@ package org.apache.dubbo.remoting.utils; import org.apache.dubbo.common.URL; +import org.apache.dubbo.remoting.Constants; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -37,4 +38,12 @@ class UrlUtilsTest { URL url = URL.valueOf("dubbo://127.0.0.1:12345?heartbeat=10000"); Assertions.assertEquals(UrlUtils.getHeartbeat(url), 10000); } + + @Test + void testConfiguredHeartbeat() { + System.setProperty(Constants.HEARTBEAT_CONFIG_KEY, "200"); + URL url = URL.valueOf("dubbo://127.0.0.1:12345"); + Assertions.assertEquals(200, UrlUtils.getHeartbeat(url)); + System.clearProperty(Constants.HEARTBEAT_CONFIG_KEY); + } }