You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/11/06 10:58:38 UTC
[camel] 04/12: Add connection pool to yql component
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit b490da3ef9aca0713b458f8c7b333659937ad284
Author: Carl-Philipp Harmant <cp...@gmail.com>
AuthorDate: Tue Oct 31 15:55:45 2017 -0500
Add connection pool to yql component
---
.../apache/camel/component/yql/YqlComponent.java | 30 +++++++++++++++++++++-
.../apache/camel/component/yql/YqlEndpoint.java | 25 +++++++++++++++++-
.../apache/camel/component/yql/YqlProducer.java | 6 ++---
.../camel/component/yql/client/YqlClient.java | 10 +++++---
4 files changed, 63 insertions(+), 8 deletions(-)
diff --git a/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlComponent.java b/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlComponent.java
index 6c64a77..02b778f 100644
--- a/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlComponent.java
+++ b/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlComponent.java
@@ -21,19 +21,47 @@ import org.apache.camel.Endpoint;
import org.apache.camel.component.yql.configuration.YqlConfiguration;
import org.apache.camel.component.yql.configuration.YqlConfigurationValidator;
import org.apache.camel.impl.DefaultComponent;
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
public class YqlComponent extends DefaultComponent {
+ private HttpClientConnectionManager localConnectionManager;
+
@Override
protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters) throws Exception {
final YqlConfiguration configuration = new YqlConfiguration();
configuration.setQuery(remaining);
- final Endpoint endpoint = new YqlEndpoint(uri, this, configuration);
+ final HttpClientConnectionManager connectionManager = createConnectionManager();
+
+ final Endpoint endpoint = new YqlEndpoint(uri, this, configuration, connectionManager);
YqlConfigurationValidator.validateProperties(configuration);
setProperties(configuration, parameters);
return endpoint;
}
+
+ @Override
+ protected void doStop() throws Exception {
+ if (localConnectionManager != null) {
+ localConnectionManager.shutdown();
+ }
+ }
+
+ public void setConnectionManager(final HttpClientConnectionManager connectionManager){
+ this.localConnectionManager = connectionManager;
+ }
+
+ private HttpClientConnectionManager createConnectionManager(){
+ if (localConnectionManager != null) {
+ return localConnectionManager;
+ }
+ final PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
+ connectionManager.setMaxTotal(200);
+ connectionManager.setDefaultMaxPerRoute(20);
+ setConnectionManager(connectionManager);
+ return connectionManager;
+ }
}
diff --git a/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlEndpoint.java b/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlEndpoint.java
index af283e4..90384c2 100644
--- a/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlEndpoint.java
+++ b/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlEndpoint.java
@@ -23,16 +23,23 @@ import org.apache.camel.component.yql.configuration.YqlConfiguration;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
@UriEndpoint(firstVersion = "2.21.0", scheme = "yql", title = "Yahoo Query Language", syntax = "yql:query", producerOnly = true, label = "api,http")
public class YqlEndpoint extends DefaultEndpoint {
@UriParam
private final YqlConfiguration configuration;
+ private final HttpClientConnectionManager connectionManager;
+ private CloseableHttpClient httpClient;
- YqlEndpoint(final String uri, final YqlComponent component, final YqlConfiguration configuration) {
+ YqlEndpoint(final String uri, final YqlComponent component, final YqlConfiguration configuration, final HttpClientConnectionManager connectionManager) {
super(uri, component);
this.configuration = configuration;
+ this.connectionManager = connectionManager;
}
@Override
@@ -50,6 +57,22 @@ public class YqlEndpoint extends DefaultEndpoint {
return true;
}
+ @Override
+ protected void doStop() throws Exception {
+ if (httpClient != null) {
+ httpClient.close();
+ }
+ }
+
+ synchronized CloseableHttpClient getHttpClient() {
+ if (httpClient == null) {
+ httpClient = HttpClients.custom()
+ .setConnectionManager(connectionManager)
+ .build();
+ }
+ return httpClient;
+ }
+
YqlConfiguration getConfiguration() {
return configuration;
}
diff --git a/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlProducer.java b/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlProducer.java
index c63dc7b..c429c85 100644
--- a/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlProducer.java
+++ b/components/camel-yql/src/main/java/org/apache/camel/component/yql/YqlProducer.java
@@ -31,18 +31,18 @@ public class YqlProducer extends DefaultProducer {
static final String CAMEL_YQL_HTTP_REQUEST = "CamelYqlHttpRequest";
private final YqlEndpoint endpoint;
- private final YqlClient yahooClient;
+ private final YqlClient yqlClient;
YqlProducer(final YqlEndpoint endpoint) {
super(endpoint);
this.endpoint = endpoint;
- this.yahooClient = new YqlClient();
+ this.yqlClient = new YqlClient(endpoint.getHttpClient());
}
@Override
public void process(final Exchange exchange) throws Exception {
final YqlConfiguration configuration = endpoint.getConfiguration();
- final YqlResponse yqlResponse = yahooClient.get(
+ final YqlResponse yqlResponse = yqlClient.get(
configuration.getQuery(),
configuration.getFormat(),
configuration.isDiagnostics(),
diff --git a/components/camel-yql/src/main/java/org/apache/camel/component/yql/client/YqlClient.java b/components/camel-yql/src/main/java/org/apache/camel/component/yql/client/YqlClient.java
index 0d5f00d..650243c 100644
--- a/components/camel-yql/src/main/java/org/apache/camel/component/yql/client/YqlClient.java
+++ b/components/camel-yql/src/main/java/org/apache/camel/component/yql/client/YqlClient.java
@@ -21,7 +21,6 @@ import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,7 +28,12 @@ import org.slf4j.LoggerFactory;
public class YqlClient {
private static final Logger LOG = LoggerFactory.getLogger(YqlClient.class);
- private static final CloseableHttpClient HTTP_CLIENT = HttpClients.createDefault();
+
+ private final CloseableHttpClient httpClient;
+
+ public YqlClient(final CloseableHttpClient httpClient){
+ this.httpClient = httpClient;
+ }
public YqlResponse get(final String query, final String format, final boolean diagnostics, final String callback) throws Exception {
@@ -47,7 +51,7 @@ public class YqlClient {
LOG.debug("YQL query: {}", uri);
final HttpGet httpget = new HttpGet(uri);
- try (final CloseableHttpResponse response = HTTP_CLIENT.execute(httpget)) {
+ try (final CloseableHttpResponse response = httpClient.execute(httpget)) {
final YqlResponse yqlResponse = YqlResponse.builder()
.httpRequest(uri.toString())
.status(response.getStatusLine().getStatusCode())
--
To stop receiving notification emails like this one, please contact
"commits@camel.apache.org" <co...@camel.apache.org>.