每个端点 URI 的 ProducerTemplate?
ProducerTemplate per endpoint URI?
我正在开发一个应用程序(使用 Camel 2.13.2),它需要使用 ProducerTemplate
向不同的端点发送不同的消息。最初我们为每条消息创建一个新的 ProducerTemplate
,但在阅读 this article on ProducerTemplate usage 之后我决定重构并尝试为每个 camel 上下文使用一个 ProducerTemplate
。
然而事实证明这比最初看起来要复杂得多。我在使用单个 ProducerTemplate
进行 junit 测试时遇到了困难(我们有一些复杂的测试涉及关闭和启动单独的路由),现在我想知道我是否试图过分警告那个在这种情况下,多个 ProducerTemplate
可能是可以接受的。
这是我的问题:根据上面链接的文章中的建议,为每个端点实例创建一个 ProducerTemplate 是否可以接受? (模板将在需要时保留)
示例: 如果我有端点 direct:processA
、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);
两者都可以。例如,如果您使用 Camel POJO 生成它的行为,就像第一个在幕后一样。
根据请求创建新模板是错误的。请参阅此常见问题解答:http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html
我正在开发一个应用程序(使用 Camel 2.13.2),它需要使用 ProducerTemplate
向不同的端点发送不同的消息。最初我们为每条消息创建一个新的 ProducerTemplate
,但在阅读 this article on ProducerTemplate usage 之后我决定重构并尝试为每个 camel 上下文使用一个 ProducerTemplate
。
然而事实证明这比最初看起来要复杂得多。我在使用单个 ProducerTemplate
进行 junit 测试时遇到了困难(我们有一些复杂的测试涉及关闭和启动单独的路由),现在我想知道我是否试图过分警告那个在这种情况下,多个 ProducerTemplate
可能是可以接受的。
这是我的问题:根据上面链接的文章中的建议,为每个端点实例创建一个 ProducerTemplate 是否可以接受? (模板将在需要时保留)
示例: 如果我有端点 direct:processA
、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);
两者都可以。例如,如果您使用 Camel POJO 生成它的行为,就像第一个在幕后一样。
根据请求创建新模板是错误的。请参阅此常见问题解答:http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html