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 <ryanov.nik...@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 davscl...@apache.org.