You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Vyacheslav Boyko <ma...@gmail.com> on 2021/11/03 11:25:21 UTC
Give me suggestions about how to use ProducerTemplate correctly
please
Hello.
I have faced with important notice in JavaDoc of
org.apache.camel.CamelContext#createProducerTemplate() and it makes me
rethink how to use it.
JavaDoc prescribes: Important: Make sure to call ProducerTemplate.stop()
when you are done using the template, to clean up any resources.
So, when I implement RouteBuilder in SpringBoot project I make it like:
@Component
class BusinessRouteBuilder extends RouteBuilder {
@Override
public void configure() {
from("seda://start")
.to("seda://business-start"); // to process in separated thread
}
public void sendMessage(Msg msg) {
getContext().createProducerTemplate().sendBody("seda://start", msg);
}
}
My question and concern is: am I doing it correctly?
It seems I have to stop ProducerTemplate created before. But where to
close it? Right after it was used in sendMessage() like the following?
public void sendMessage(Msg msg) {
ProducerTemplate producerTemplate =
getContext().createProducerTemplate();
producerTemplate.sendBody("seda://start", msg);
producerTemplate.stop();
}
Or maybe it will be better to create one ProducerTemplate per Spring
bean and to stop it in @PreDestroy method like the following?
@Component
class BusinessRouteBuilder extends RouteBuilder {
ProducerTemplate producerTemplate;
@Override
public void configure() {
producerTemplate = getContext().createProducerTemplate();
from("seda://start")
.to("seda://business-start"); // to process in separated thread
}
public void sendMessage(Msg msg) {
producerTemplate.sendBody("seda://start", msg);
}
@PreDestroy
public void preDestroy() {
producerTemplate.stop();
}
}
___
Vyacheslav Boyko
mailto:mail4bvn@gmail.com
Re: Give me suggestions about how to use ProducerTemplate correctly please
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
See this FAQ
https://camel.apache.org/manual/faq/why-does-camel-use-too-many-threads-with-producertemplate.html
You do not create a template per message you send, you create it once
/ or better you dependency inject it into the route builder.
Since you use spring you can use @Autowired or @Inject etc
On Wed, Nov 3, 2021 at 12:25 PM Vyacheslav Boyko <ma...@gmail.com> wrote:
>
> Hello.
>
> I have faced with important notice in JavaDoc of
> org.apache.camel.CamelContext#createProducerTemplate() and it makes me
> rethink how to use it.
>
> JavaDoc prescribes: Important: Make sure to call ProducerTemplate.stop()
> when you are done using the template, to clean up any resources.
>
> So, when I implement RouteBuilder in SpringBoot project I make it like:
>
> @Component
> class BusinessRouteBuilder extends RouteBuilder {
> @Override
> public void configure() {
> from("seda://start")
> .to("seda://business-start"); // to process in separated thread
> }
> public void sendMessage(Msg msg) {
> getContext().createProducerTemplate().sendBody("seda://start", msg);
> }
> }
>
>
> My question and concern is: am I doing it correctly?
>
> It seems I have to stop ProducerTemplate created before. But where to
> close it? Right after it was used in sendMessage() like the following?
>
> public void sendMessage(Msg msg) {
> ProducerTemplate producerTemplate =
> getContext().createProducerTemplate();
> producerTemplate.sendBody("seda://start", msg);
> producerTemplate.stop();
> }
>
> Or maybe it will be better to create one ProducerTemplate per Spring
> bean and to stop it in @PreDestroy method like the following?
>
> @Component
> class BusinessRouteBuilder extends RouteBuilder {
> ProducerTemplate producerTemplate;
> @Override
> public void configure() {
> producerTemplate = getContext().createProducerTemplate();
> from("seda://start")
> .to("seda://business-start"); // to process in separated thread
> }
> public void sendMessage(Msg msg) {
> producerTemplate.sendBody("seda://start", msg);
> }
> @PreDestroy
> public void preDestroy() {
> producerTemplate.stop();
> }
> }
>
> ___
> Vyacheslav Boyko
> mailto:mail4bvn@gmail.com
>
--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2