我们在Web应用程序中使用Spring和Camel。在我们的一个控制器中,我们使用ProducerTemplate在路由上发送消息,现在我想添加另一个控制器,它将在单独的路由上发送消息。我试图了解我们是否只假设整个应用程序都有一个ProducerTemplate?
我问这个是因为我在阅读this后感到有些困惑。
答案 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 /处理器中创建它们中的一些也很好......只需将它们缓存以用于后续的消息请求。