Update minimal reconnect period (#12639)
This commit is contained in:
parent
7264850fd4
commit
271d5eff29
|
|
@ -63,6 +63,13 @@ public interface Constants {
|
|||
*/
|
||||
long LEAST_HEARTBEAT_DURATION = 1000;
|
||||
|
||||
/**
|
||||
* the least reconnect during is 60000 ms.
|
||||
*/
|
||||
long LEAST_RECONNECT_DURATION = 60000;
|
||||
|
||||
String LEAST_RECONNECT_DURATION_KEY = "dubbo.application.least-reconnect-duration";
|
||||
|
||||
/**
|
||||
* ticks per wheel.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import static org.apache.dubbo.remoting.Constants.HEARTBEAT_CHECK_TICK;
|
||||
import static org.apache.dubbo.remoting.Constants.LEAST_HEARTBEAT_DURATION;
|
||||
import static org.apache.dubbo.remoting.Constants.LEAST_RECONNECT_DURATION;
|
||||
import static org.apache.dubbo.remoting.Constants.LEAST_RECONNECT_DURATION_KEY;
|
||||
import static org.apache.dubbo.remoting.Constants.TICKS_PER_WHEEL;
|
||||
import static org.apache.dubbo.remoting.utils.UrlUtils.getHeartbeat;
|
||||
import static org.apache.dubbo.remoting.utils.UrlUtils.getIdleTimeout;
|
||||
|
|
@ -214,7 +216,8 @@ public class HeaderExchangeClient implements ExchangeClient {
|
|||
private void startReconnectTask(URL url) {
|
||||
if (shouldReconnect(url)) {
|
||||
long heartbeatTimeoutTick = calculateLeastDuration(idleTimeout);
|
||||
reconnectTimerTask = new ReconnectTimerTask(() -> Collections.singleton(this), IDLE_CHECK_TIMER.get(), heartbeatTimeoutTick, idleTimeout);
|
||||
reconnectTimerTask = new ReconnectTimerTask(() -> Collections.singleton(this), IDLE_CHECK_TIMER.get(),
|
||||
calculateReconnectDuration(url, heartbeatTimeoutTick), idleTimeout);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -240,6 +243,11 @@ public class HeaderExchangeClient implements ExchangeClient {
|
|||
}
|
||||
}
|
||||
|
||||
private long calculateReconnectDuration(URL url, long tick) {
|
||||
long leastReconnectDuration = url.getParameter(LEAST_RECONNECT_DURATION_KEY, LEAST_RECONNECT_DURATION);
|
||||
return Math.max(leastReconnectDuration, tick);
|
||||
}
|
||||
|
||||
private boolean shouldReconnect(URL url) {
|
||||
return url.getParameter(Constants.RECONNECT_KEY, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,11 +29,13 @@ import org.apache.dubbo.remoting.exchange.Exchangers;
|
|||
import org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter;
|
||||
import org.apache.dubbo.rpc.model.ApplicationModel;
|
||||
import org.apache.dubbo.rpc.model.FrameworkModel;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_MANAGEMENT_MODE_DEFAULT;
|
||||
import static org.apache.dubbo.remoting.Constants.LEAST_RECONNECT_DURATION_KEY;
|
||||
|
||||
/**
|
||||
* Client reconnect test
|
||||
|
|
@ -76,7 +78,7 @@ class ClientReconnectTest {
|
|||
|
||||
public Client startClient(int port, int heartbeat) throws RemotingException {
|
||||
URL url = URL.valueOf("exchange://127.0.0.1:" + port + "/client.reconnect.test?check=false&codec=exchange&client=netty3&" +
|
||||
Constants.HEARTBEAT_KEY + "=" + heartbeat);
|
||||
Constants.HEARTBEAT_KEY + "=" + heartbeat + "&" + LEAST_RECONNECT_DURATION_KEY + "=0");
|
||||
ApplicationModel applicationModel = ApplicationModel.defaultModel();
|
||||
ApplicationConfig applicationConfig = new ApplicationConfig("provider-app");
|
||||
applicationConfig.setExecutorManagementMode(EXECUTOR_MANAGEMENT_MODE_DEFAULT);
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@ import org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter;
|
|||
import org.apache.dubbo.rpc.model.ApplicationModel;
|
||||
import org.apache.dubbo.rpc.model.FrameworkModel;
|
||||
import org.apache.dubbo.rpc.model.ModuleModel;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_MANAGEMENT_MODE_DEFAULT;
|
||||
import static org.apache.dubbo.remoting.Constants.LEAST_RECONNECT_DURATION_KEY;
|
||||
|
||||
/**
|
||||
* Client reconnect test
|
||||
|
|
@ -81,7 +83,8 @@ class ClientReconnectTest {
|
|||
|
||||
|
||||
public Client startClient(int port, int heartbeat) throws RemotingException {
|
||||
URL url = URL.valueOf("exchange://127.0.0.1:" + port + "/client.reconnect.test?client=netty4&check=false&" + Constants.HEARTBEAT_KEY + "=" + heartbeat);
|
||||
URL url = URL.valueOf("exchange://127.0.0.1:" + port + "/client.reconnect.test?client=netty4&check=false&" +
|
||||
Constants.HEARTBEAT_KEY + "=" + heartbeat + "&" + LEAST_RECONNECT_DURATION_KEY + "=0");
|
||||
FrameworkModel frameworkModel = new FrameworkModel();
|
||||
ApplicationModel applicationModel = frameworkModel.newApplication();
|
||||
ApplicationConfig applicationConfig = new ApplicationConfig("provider-app");
|
||||
|
|
|
|||
Loading…
Reference in New Issue