我正在开发一个应用程序(使用Camel 2.13.2),要求使用ProducerTemplate
将不同的消息发送到不同的端点。最初,我们为每个消息创建一个新的ProducerTemplate
,但是在阅读this article on ProducerTemplate usage之后,我决定重构并尝试为每个骆驼上下文使用单个ProducerTemplate
。
但是,事实证明,这比最初看起来要复杂得多。我正在使用一个ProducerTemplate
进行困难的junit测试(我们有一些涉及关闭和启动个别路径的复杂测试),现在我想知道是否我正在尝试将警告范围过大而将多个 s。
这是我的问题:在上面链接的文章中建议的为每个终结点实例创建ProducerTemplate的建议是否可以接受? (模板将在需要的时间内保存)
示例:如果我有端点ProducerTemplate
,direct:processA
和direct:processB
,可以这样做:
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);
还是作者打算只为所有端点创建一个
direct:processC
: 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);
最佳答案
两者都可以。例如,如果您使用Camel POJO进行生产,就像第1幕一样。
http://camel.apache.org/bean-integration.html
http://camel.apache.org/pojo-producing.html
它为每个请求创建新模板是错误的。请参阅以下常见问题解答:http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html