我正在开发一个应用程序(使用Camel 2.13.2),它需要使用ProducerTemplate
向不同的端点发送不同的消息。最初我们在为每条消息创建一个新的ProducerTemplate
,但在阅读this article on ProducerTemplate usage之后,我决定重构并尝试使用每个驼峰上下文的ProducerTemplate
个ProducerTemplate
。
然而事实证明这比最初看起来更复杂。我使用单ProducerTemplate
遇到了难以进行junit测试(我们有一些复杂的测试涉及关闭和启动单个路线)现在我想知道是否可能我试图接受警告太过分了,在这种情况下可以接受多个direct:processA
。
以下是我的问题:根据上面链接的文章中的建议,是否可以为每个端点实例创建一个ProducerTemplate? (只要需要,模板就会被保存)
示例:如果我有端点direct:processB
,direct:processC
和 ProducerTemplate templateA = context.createProducerTemplate();
ProducerTemplate templateB = context.createProducerTemplate();
ProducerTemplate templateC = context.createProducerTemplate();
templateA.setDefaultEndpointUri("direct:processA");
templateB.setDefaultEndpointUri("direct:processB");
templateC.setDefaultEndpointUri("direct:processC");
// in thread A
templateA.sendBody(bodyA);
// in thread B
templateB.sendBody(bodyB);
// in thread C
templateC.sendBody(bodyC);
,则可以接受这样做:
ProducerTemplate
或者作者是否打算只为所有端点创建一个 ProducerTemplate template = context.createProducerTemplate();
// in thread A
template.sendBody("direct:processA", bodyA);
// in thread B
template.sendBody("direct:processB", bodyB);
// in thread C
template.sendBody("direct:processC", bodyC);
:
{{1}}
答案 0 :(得分:1)
你可以做到这两点。例如,如果你使用Camel POJO生成它的第一个就好了。
每个请求创建新模板是错误的。请参阅此常见问题解答:http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html