diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java index 7f8bc79f401..4290ef20b71 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java @@ -61,7 +61,7 @@ public class RestProtocol extends AbstractProxyProtocol { private static final int HTTPCLIENTCONNECTIONMANAGER_MAXPERROUTE = 20; private static final int HTTPCLIENTCONNECTIONMANAGER_MAXTOTAL = 20; - private static final int HTTPCLIENT_KEEPALIVEDURATION = 30*1000; + private static final int HTTPCLIENT_KEEPALIVEDURATION = 30 * 1000; private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEWAITTIME_MS = 1000; private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEIDLETIME_S = 30; @@ -70,7 +70,7 @@ public class RestProtocol extends AbstractProxyProtocol { private final RestServerFactory serverFactory = new RestServerFactory(); // TODO in the future maybe we can just use a single rest client and connection manager - private final List clients = Collections.synchronizedList(new LinkedList()); + private final List clients = Collections.synchronizedList(new LinkedList<>()); private volatile ConnectionMonitor connectionMonitor; @@ -136,9 +136,6 @@ public void run() { @Override protected T doRefer(Class serviceType, URL url) throws RpcException { - if (connectionMonitor == null) { - connectionMonitor = new ConnectionMonitor(); - } // TODO more configs to add PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); @@ -146,6 +143,10 @@ protected T doRefer(Class serviceType, URL url) throws RpcException { connectionManager.setMaxTotal(url.getParameter(Constants.CONNECTIONS_KEY, HTTPCLIENTCONNECTIONMANAGER_MAXTOTAL)); connectionManager.setDefaultMaxPerRoute(url.getParameter(Constants.CONNECTIONS_KEY, HTTPCLIENTCONNECTIONMANAGER_MAXPERROUTE)); + if (connectionMonitor == null) { + connectionMonitor = new ConnectionMonitor(); + connectionMonitor.start(); + } connectionMonitor.addConnectionManager(connectionManager); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(url.getParameter(Constants.CONNECT_TIMEOUT_KEY, Constants.DEFAULT_CONNECT_TIMEOUT)) @@ -239,7 +240,7 @@ public void destroy() { protected String getContextPath(URL url) { String contextPath = url.getPath(); - return contextPath.endsWith("/") ? contextPath.substring(0,contextPath.length()-1) : contextPath; + return contextPath.endsWith("/") ? contextPath.substring(0, contextPath.length() - 1) : contextPath; } protected class ConnectionMonitor extends Thread {