我正在开发一个应用程序(使用Camel 2.13.2),要求使用ProducerTemplate将不同的消息发送到不同的端点。最初,我们为每个消息创建一个新的ProducerTemplate,但是在阅读this article on ProducerTemplate usage之后,我决定重构并尝试为每个骆驼上下文使用单个ProducerTemplate

但是,事实证明,这比最初看起来要复杂得多。我正在使用一个ProducerTemplate进行困难的junit测试(我们有一些涉及关闭和启动个别路径的复杂测试),现在我想知道是否我正在尝试将警告范围过大而将多个 s。

这是我的问题:在上面链接的文章中建议的为每个终结点实例创建ProducerTemplate的建议是否可以接受? (模板将在需要的时间内保存)

示例:如果我有端点ProducerTemplatedirect:processAdirect: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

10-06 05:04