You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2021/08/04 15:14:00 UTC
[jira] [Commented] (CAMEL-16848) Remove The creation of
executorService in JMSConsumer
[ https://issues.apache.org/jira/browse/CAMEL-16848?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17393253#comment-17393253 ]
Claus Ibsen commented on CAMEL-16848:
-------------------------------------
Try set defaultTaskExecutorType=SimpleAsync then no thread pool is created
> Remove The creation of executorService in JMSConsumer
> -----------------------------------------------------
>
> Key: CAMEL-16848
> URL: https://issues.apache.org/jira/browse/CAMEL-16848
> Project: Camel
> Issue Type: Improvement
> Components: camel-jms
> Affects Versions: 2.25.4
> Environment: Camel 2.23.4
> Centos 7
> Reporter: nizar.ben.mansour
> Priority: Major
> Labels: optimization, performance-benchmark
>
> In JMSConsumer,we have an executorService that's created but used only when shutting down and stopping the ListenerContainer.
>
> {code:java}
> protected void stopAndDestroyListenerContainer() {
> if (listenerContainer != null) {
> try {
> listenerContainer.stop();
> listenerContainer.destroy();
> } finally {
> getEndpoint().onListenerContainerStopped(listenerContainer);
> }
> }
> // null container and listener so they are fully re created if this consumer is restarted
> // then we will use updated configuration from jms endpoint that may have been managed using JMX
> listenerContainer = null;
> messageListener = null;
> initialized = false;
> // shutdown thread pool if listener container was using a private thread pool
> if (shutdownExecutorService && executorService != null) {
> getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executorService);
> }
> executorService = null;
> }
> {code}
>
> As per git history,this was created to fix the issue https://issues.apache.org/jira/browse/CAMEL-6199
>
> But for our case we are not adding or removing routes dynamiclly and what we have remarked is that for each JMS_CONSUMER ,we are creating a newCashedThreadPool for no reason:
>
> {code:java}
> else if ((listenerContainer instanceof DefaultJmsMessageListenerContainer && configuration.getDefaultTaskExecutorType() == null)
> || !(listenerContainer instanceof DefaultJmsMessageListenerContainer)) {
> // preserve backwards compatibility if an explicit Default TaskExecutor Type was not set;
> // otherwise, defer the creation of the TaskExecutor
> // use a cached pool as DefaultMessageListenerContainer will throttle pool sizing
> ExecutorService executor = getCamelContext().getExecutorServiceManager().newCachedThreadPool(consumer, consumerName);
> setContainerTaskExecutor(listenerContainer, executor);
> // we created a new private thread pool that this listener container is using, now store a reference on the consumer
> // so when the consumer is stopped we can shutdown the thread pool also, to ensure all resources is shutdown
> consumer.setListenerContainerExecutorService(executor, true);{code}
>
> This threadPoolExecutor that is passed to the JMS_CONSUMER is making a performance impact in our application .
> Can we remove it and /or make it configurable so we can desactive it ?
>
> Thanks.
>
> Nizar
--
This message was sent by Atlassian Jira
(v8.3.4#803005)