每个端点 URI 的 ProducerTemplate?

ProducerTemplate per endpoint URI?

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

然而事实证明这比最初看起来要复杂得多。我在使用单个 ProducerTemplate 进行 junit 测试时遇到了困难(我们有一些复杂的测试涉及关闭和启动单独的路由),现在我想知道我是否试图过分警告那个在这种情况下,多个 ProducerTemplate 可能是可以接受的。

这是我的问题:根据上面链接的文章中的建议,为每个端点实例创建一个 ProducerTemplate 是否可以接受? (模板将在需要时保留)

示例: 如果我有端点 direct:processAdirect:processBdirect: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);

两者都可以。例如,如果您使用 Camel POJO 生成它的行为,就像第一个在幕后一样。

根据请求创建新模板是错误的。请参阅此常见问题解答:http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html