Why does Camel use too many threads with ProducerTemplate?

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 or Guice) 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: