Why does Camel use too many threads with ProducerTemplate?

A common reason is creating a new ProducerTemplate inside a Processor or bean method invocation.

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.

It’s better to either explicitly create one on startup or get your IoC container (Spring) to inject it into your Processor or bean then it can take care of creating it and destroying all the resources when you have finished with it.

For instance using Spring you can define a template and have Spring handle the lifecycle of it:

    <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
        <template id="template"/>
    </camelContext>

Then you can refer to the ProducerTemplate with the id template.