This is an automated email from the ASF dual-hosted git repository.

lixiaojie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 813fed5  [Enhancement]: RestProtocol (#3480)
813fed5 is described below

commit 813fed53e8da58beb48bae9ed602f133abb3f747
Author: kezhenxu94 <[email protected]>
AuthorDate: Sun Feb 17 13:51:12 2019 +0800

    [Enhancement]: RestProtocol (#3480)
---
 .../dubbo/rpc/protocol/rest/RestProtocol.java      | 50 +++++++++-------------
 1 file changed, 20 insertions(+), 30 deletions(-)

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 4290ef2..26d0aa0 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
@@ -28,16 +28,13 @@ import org.apache.dubbo.rpc.protocol.AbstractProxyProtocol;
 
 import org.apache.http.HeaderElement;
 import org.apache.http.HeaderElementIterator;
-import org.apache.http.HttpResponse;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.config.SocketConfig;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.apache.http.message.BasicHeaderElementIterator;
 import org.apache.http.protocol.HTTP;
-import org.apache.http.protocol.HttpContext;
 import org.jboss.resteasy.client.jaxrs.ResteasyClient;
 import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
 import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
@@ -65,7 +62,7 @@ public class RestProtocol extends AbstractProxyProtocol {
     private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEWAITTIME_MS = 
1000;
     private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEIDLETIME_S = 30;
 
-    private final Map<String, RestServer> servers = new 
ConcurrentHashMap<String, RestServer>();
+    private final Map<String, RestServer> servers = new ConcurrentHashMap<>();
 
     private final RestServerFactory serverFactory = new RestServerFactory();
 
@@ -91,12 +88,11 @@ public class RestProtocol extends AbstractProxyProtocol {
     protected <T> Runnable doExport(T impl, Class<T> type, URL url) throws 
RpcException {
         String addr = getAddr(url);
         Class implClass = 
ApplicationModel.getProviderModel(url.getServiceKey()).getServiceInstance().getClass();
-        RestServer server = servers.get(addr);
-        if (server == null) {
-            server = 
serverFactory.createServer(url.getParameter(Constants.SERVER_KEY, 
DEFAULT_SERVER));
-            server.start(url);
-            servers.put(addr, server);
-        }
+        RestServer server = servers.computeIfAbsent(addr, restServer -> {
+            RestServer s = 
serverFactory.createServer(url.getParameter(Constants.SERVER_KEY, 
DEFAULT_SERVER));
+            s.start(url);
+            return s;
+        });
 
         String contextPath = getContextPath(url);
         if ("servlet".equalsIgnoreCase(url.getParameter(Constants.SERVER_KEY, 
DEFAULT_SERVER))) {
@@ -124,13 +120,10 @@ public class RestProtocol extends AbstractProxyProtocol {
         server.deploy(resourceDef, impl, contextPath);
 
         final RestServer s = server;
-        return new Runnable() {
-            @Override
-            public void run() {
-                // TODO due to dubbo's current architecture,
-                // it will be called from registry protocol in the shutdown 
process and won't appear in logs
-                s.undeploy(resourceDef);
-            }
+        return () -> {
+            // TODO due to dubbo's current architecture,
+            // it will be called from registry protocol in the shutdown 
process and won't appear in logs
+            s.undeploy(resourceDef);
         };
     }
 
@@ -159,20 +152,17 @@ public class RestProtocol extends AbstractProxyProtocol {
                 .build();
 
         CloseableHttpClient httpClient = HttpClientBuilder.create()
-                .setKeepAliveStrategy(new ConnectionKeepAliveStrategy() {
-                    @Override
-                    public long getKeepAliveDuration(HttpResponse response, 
HttpContext context) {
-                        HeaderElementIterator it = new 
BasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE));
-                        while (it.hasNext()) {
-                            HeaderElement he = it.nextElement();
-                            String param = he.getName();
-                            String value = he.getValue();
-                            if (value != null && 
param.equalsIgnoreCase(Constants.TIMEOUT_KEY)) {
-                                return Long.parseLong(value) * 1000;
-                            }
+                .setKeepAliveStrategy((response, context) -> {
+                    HeaderElementIterator it = new 
BasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE));
+                    while (it.hasNext()) {
+                        HeaderElement he = it.nextElement();
+                        String param = he.getName();
+                        String value = he.getValue();
+                        if (value != null && 
param.equalsIgnoreCase(Constants.TIMEOUT_KEY)) {
+                            return Long.parseLong(value) * 1000;
                         }
-                        return HTTPCLIENT_KEEPALIVEDURATION;
                     }
+                    return HTTPCLIENT_KEEPALIVEDURATION;
                 })
                 .setDefaultRequestConfig(requestConfig)
                 .setDefaultSocketConfig(socketConfig)
@@ -245,7 +235,7 @@ public class RestProtocol extends AbstractProxyProtocol {
 
     protected class ConnectionMonitor extends Thread {
         private volatile boolean shutdown;
-        private final List<PoolingHttpClientConnectionManager> 
connectionManagers = Collections.synchronizedList(new 
LinkedList<PoolingHttpClientConnectionManager>());
+        private final List<PoolingHttpClientConnectionManager> 
connectionManagers = Collections.synchronizedList(new LinkedList<>());
 
         public void addConnectionManager(PoolingHttpClientConnectionManager 
connectionManager) {
             connectionManagers.add(connectionManager);

Reply via email to