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);