Hi

Most of the work is done now. What remains is to do some wiki documentation.
I recon we got a good solution now with thread pool profiles which
makes it easy to setup the threading model you need.



On Fri, Mar 19, 2010 at 11:07 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Hi
>
> You can see notes here as well
> http://camel.apache.org/camel-23-threadpool-configuration.html
>
>
> On Thu, Mar 18, 2010 at 2:24 PM, Ashwin Karpe <aska...@progress.com> wrote:
>>
>> Hi Claus,
>>
>> I do like the settings as initial values which could be potentially
>> overridden by the components. I also agree with the workQueue filling up
>> being the trigger to add more threads.
>>
>> It would be great if all components could uniformly apply these initial
>> values which could ten be changed by the application/component users
>> themselves. This will prevent components from starving each other out with
>> their individual settings
>>
>
> Moving forward Components can leverage
> CamelContext.getExecutorServiceStrategy() to create the kind of thread
> pool they want.
> But using this strategy you let Camel aid you and have it
> - export the pool for JMX so it can be managed
> - handle lifecycle by shutting it down when Camel shutdown
> - logging details about the created pool
> - allows 3rd party strategies to hook in and use their own thread pool
> factory (eg WorkManager from a J2EE server)
> - easier to create thread pool than the ugly ThreadPoolExecutor constructor
>
> When time permits I will create a wiki page with more details.
> Its also being documented in chapter 10 of the Camel in Action book as well.
>
>
>
>> Hope this helps.
>>
>> Cheers,
>>
>> Ashwin...
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> Hi
>>>
>>> I am posting this to user so Camel end users have a chance to make an
>>> impact on this matter.
>>>
>>>
>>> I am working on making configuring thread pools in Camel much easier.
>>> https://issues.apache.org/activemq/browse/CAMEL-1588
>>>
>>> In light of this work we are introducing a ThreadPoolProfile which
>>> contains settings to be used when a thread pool is to be created.
>>>
>>> The idea currently is that there is a *default* profile that is used
>>> normally, and its has the following options
>>>     private Integer poolSize = 10;
>>>     private Integer maxPoolSize = 20;
>>>     private Long keepAliveTime = 60L;
>>>     private TimeUnit timeUnit = TimeUnit.SECONDS;
>>>     private Integer maxQueueSize = 1000;
>>>     private ThreadPoolRejectedPolicy rejectedPolicy;
>>>
>>> And the rejectedPolicy will default to use: CallerRuns. There are 4
>>> options: Abort, CallerRuns, DiscardOldest, Discard;
>>>
>>>
>>> I am currently wondering if these default settings is matching what
>>> you would expect / like to be default in Camel 2.3 onwards.
>>> How this works in Java is that the thread pool will have as min 10
>>> threads in the pool and a worker queue with a 1000 capacity.
>>> And only when its exhausted, eg the capacity has been hit, it will
>>> grow the pool up till 20 threads to help.
>>> And if threads is idle for more than 60 seconds it will be terminated.
>>>
>>> There are two options which I may want to adjust change
>>> - maxQueueSize = 1000
>>> - rejectedPolicy = CallerRuns
>>>
>>> Is the default capacity of 1000 to high? For example having 100, will
>>> let the thread pool to grow sooner to help out.
>>> Or is 100 to low. Also mind that the task queue is in memory so if the
>>> server crashes those tasks are gone.
>>>
>>> And the rejectedPolicy with CallerRuns allows to let the caller thread
>>> execute the task instead of handing it over to the thread pool.
>>> This is like a last resort if the thread pool is really exhausted and
>>> otherwise would have to either abort or discard a task.
>>> However the good point is that by doing this its automatically
>>> throttling the caller as it cannot at the same time send new tasks to
>>> the thread pool.
>>>
>>> We could also add a new option: Wait. Which lets the caller wait a bit
>>> to see if the task queue has room to handover the task. But when
>>> waiting you
>>> have to cater for timeout to avoid potentially waiting for a long
>>> time. And this requires custom code to write, as the existing 4
>>> options is provided
>>> out of the box from JDK.
>>>
>>>
>>> So when are these thread pools being used?
>>> - EIPs (splitter, aggregator, multicast, wiretap etc. etc.)
>>> - ProducerTemplate having a cached pool of Producer
>>> - Threads DSL
>>> - toAsync DSL
>>>
>>> The various components may have their own thread pool, such as Jetty,
>>> Mina, Spring JMS etc.
>>>
>>>
>>> Any thoughts?
>>>
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> Apache Camel Committer
>>>
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>> Open Source Integration: http://fusesource.com
>>> Blog: http://davsclaus.blogspot.com/
>>> Twitter: http://twitter.com/davsclaus
>>>
>>>
>>
>>
>> -----
>> ---
>> Ashwin Karpe, Principal Consultant, PS - Opensource Center of Competence
>> Progress Software Corporation
>> 14 Oak Park Drive
>> Bedford, MA 01730
>> ---
>> +1-972-304-9084 (Office)
>> +1-972-971-1700 (Mobile)
>> ----
>> Blog: http://opensourceknowledge.blogspot.com/
>>
>>
>> --
>> View this message in context: 
>> http://old.nabble.com/Camel-2.3---Default-threading-profile---Your-view-tp27943985p27945489.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Reply via email to