ProducerTemplate应该只有一个实例

时间:2011-10-25 17:14:26

标签: spring apache-camel

我们在Web应用程序中使用Spring和Camel。在我们的一个控制器中,我们使用ProducerTemplate在路由上发送消息,现在我想添加另一个控制器,它将在单独的路由上发送消息。我试图了解我们是否只假设整个应用程序都有一个ProducerTemplate?

我问这个是因为我在阅读this后感到有些困惑。

2 个答案:

答案 0 :(得分:4)

引用您提供的链接:

  

您并不打算为每个消息调用创建一个ProducerTemplate;你打算在启动时创建一个实例并保持它。

     

此外,当您使用完ProducerTemplate后,您应该调用stop()方法来关闭它一直使用的所有资源。

因此,在典型的Web应用程序中,您为每个请求创建ProducerTemplate,如:

ProducerTemplate template = camelContext.createProducerTemplate();

由于显而易见的原因,这被认为是一种不好的做法。

应该注入端点,例如使用@EndpointInject annotation

@EndpointInject(uri = "file:{{file.inbox}}")
private ProducerTemplate inbox;

here所述。

答案 1 :(得分:2)

通常,请确保不为每个正在处理的邮件创建新的ProducerTemplate。话虽这么说,在不同的路由/ bean /处理器中创建它们中的一些也很好......只需将它们缓存以用于后续的消息请求。