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 2018/04/18 07:39:37 UTC

[camel] 01/02: CAMEL-12418: High CPU load on events watching (#2283)

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

davsclaus pushed a commit to branch camel-2.21.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4c0fd62eda4260e6f5505dc75bfa2f7500657e54
Author: Nick <ry...@gmail.com>
AuthorDate: Wed Apr 18 10:35:04 2018 +0300

    CAMEL-12418: High CPU load on events watching (#2283)
    
    * Add delay between listEvents requests
    
    * Use ExecutorServiceManager got via CamelContext
    
    * Add explicit field executorServiceManager
    
    * Use ExecutorServiceManager.shutdownGraceful
---
 .../consul/endpoint/ConsulEventConsumer.java       | 31 +++++++++++++++++-----
 1 file changed, 25 insertions(+), 6 deletions(-)

diff --git a/components/camel-consul/src/main/java/org/apache/camel/component/consul/endpoint/ConsulEventConsumer.java b/components/camel-consul/src/main/java/org/apache/camel/component/consul/endpoint/ConsulEventConsumer.java
index 2e8a141..7133fec 100644
--- a/components/camel-consul/src/main/java/org/apache/camel/component/consul/endpoint/ConsulEventConsumer.java
+++ b/components/camel-consul/src/main/java/org/apache/camel/component/consul/endpoint/ConsulEventConsumer.java
@@ -18,6 +18,8 @@ package org.apache.camel.component.consul.endpoint;
 
 import java.math.BigInteger;
 import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import com.orbitz.consul.Consul;
 import com.orbitz.consul.EventClient;
@@ -28,14 +30,19 @@ import com.orbitz.consul.option.QueryOptions;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.ExecutorServiceManager;
 import org.apache.camel.component.consul.ConsulConfiguration;
 import org.apache.camel.component.consul.ConsulConstants;
 import org.apache.camel.component.consul.ConsulEndpoint;
 
 public final class ConsulEventConsumer extends AbstractConsulConsumer<EventClient> {
+    private ExecutorServiceManager executorServiceManager;
+    private ScheduledExecutorService scheduledExecutorService;
 
     public ConsulEventConsumer(ConsulEndpoint endpoint, ConsulConfiguration configuration, Processor processor) {
         super(endpoint, configuration, processor, Consul::eventClient);
+        this.executorServiceManager = endpoint.getCamelContext().getExecutorServiceManager();
+        this.scheduledExecutorService = this.executorServiceManager.newSingleThreadScheduledExecutor(this, "ConsulEventConsumer");
     }
 
     @Override
@@ -43,22 +50,34 @@ public final class ConsulEventConsumer extends AbstractConsulConsumer<EventClien
         return new EventWatcher(client);
     }
 
+    @Override
+    protected void doStop() throws Exception {
+        executorServiceManager.shutdownGraceful(scheduledExecutorService);
+        super.doStop();
+    }
+
     // *************************************************************************
     // Watch
     // *************************************************************************
 
     private class EventWatcher extends AbstractWatcher implements EventResponseCallback {
+
         EventWatcher(EventClient client) {
             super(client);
         }
 
         @Override
-        public void watch(EventClient client) {
-            client.listEvents(
-                key,
-                QueryOptions.blockSeconds(configuration.getBlockSeconds(), index.get()).build(),
-                this
-            );
+        public void watch(final EventClient client) {
+            scheduledExecutorService.schedule(new Runnable() {
+                @Override
+                public void run() {
+                    client.listEvents(
+                        key,
+                        QueryOptions.blockSeconds(configuration.getBlockSeconds(), index.get()).build(),
+                        EventWatcher.this
+                    );
+                }
+            }, configuration.getBlockSeconds(), TimeUnit.SECONDS);
         }
 
         @Override

-- 
To stop receiving notification emails like this one, please contact
davsclaus@apache.org.