Thanks James! (We are on ActiveMQ 5.1.0 and Camel 1.4 by the way)
There is guidance in the 1.4 release notes "From Camel 1.4.0 on the
ProducerTemplate must be retrieved from the CamelContext. You can then use
it the same way as before." which could lead people down the wrong path and
not much pointing to the stop method, although the fact it is there should
draw attention.
So we'll now allocate a DefaultProducerTemplate passing in the context
within Spring instead and keep that instance around.
Thanks for the help!
-- Jayson
James.Strachan wrote:
>
> 2008/9/17 jayson.minard <[EMAIL PROTECTED]>:
>>
>> With a route such as:
>>
>>
>> from("activemq:queue:test.input").process(new
>> TestProcessor("activemq:queue:test.output"));
>>
>>
>> And in the TestProcessor class, if we do something like:
>>
>>
>> // outEndPoint is derived from the constructor parameter and is
>> "activemq:queue:test.output.something"
>> Message msg = exchange.getIn();
>> ProducerTemplate producer =
>> exchange.getContext().createProducerTemplate();
>> producer.sendBodyAndHeaders(outEndPoint, msg.getBody(),
>> msg.getHeaders());
>>
>>
>> It leaks threads and holds open ActiveMQ sessions endlessly.
>
> You are not meant to create a ProducerTemplate for each message
> invocation; you are meant to create a single instance on startup and
> keep it around. Also when you have finished using the
> ProducerTemplate you should call the stop() method to close down all
> the resources it has been using.
>
> Its better to either explicitly create one on startup or get your IoC
> container (Spring/Guice) to inject it into your Processor
>
> --
> James
> -------
> http://macstrac.blogspot.com/
>
> Open Source Integration
> http://open.iona.com
>
>
--
View this message in context:
http://www.nabble.com/ProducerTemplate-and-ActiveMQ-component-seems-to-leak-threads-tp19536417s22882p19557800.html
Sent from the Camel - Users mailing list archive at Nabble.com.