Camel SEDA 和 VM 端点不使用所有线程
Camel SEDA and VM endpoints not uses all threads
我有以下路线...
<route id="VM01_spit_products">
<from uri="direct:processXML" />
<split>
<method ref="CamelSplitOnKey" method="splitIntoBatches" />
<to uri="vm:processXMLSplit" />
</split>
</route>
<route id="VM01_processXML">
<from uri="vm:processXMLSplit?concurrentConsumers=15" />
<bean ref="Builder" method="createXMLFile" />
<to uri="{{ChangeReceiver}}" />
</route>
我期望使用 VM 或 SEDA 意味着如果拆分器生成 5 条消息,那么我定义的 15 个线程之一将接收这些消息中的每一条。当我调试 Builder class 时,我可以看到消息是按顺序提取的。
如果我使用 VM 或 SEDA,我会看到同样的结果。
谁能告诉我哪里出错了?
备注:
- 骆驼 2.6 由于 JDK 1.5
新信息。
我已将此代码添加到我的 Builder.java
SedaEndpoint seda = (SedaEndpoint) camelContext.getEndpoint("seda:processXMLSplit");
int size = seda.getExchanges().size();
System.out.println("size ["+size+"]");
每次打印大小为 0。
这让我觉得拆分并没有像我预期的那样排队消息。
即使您将 vm 消费者定义为拥有 15 个线程,它也不会影响您的 Split 的工作方式。默认情况下,Split 按顺序工作,因此您必须将 Split 配置为使用 parallelProcessing 以获得您想要的结果。请参阅 Splitter ParallelProcessing。另请注意@Itsallas 评论说您可能需要为您的虚拟机端点配置相同的参数。
我有以下路线...
<route id="VM01_spit_products">
<from uri="direct:processXML" />
<split>
<method ref="CamelSplitOnKey" method="splitIntoBatches" />
<to uri="vm:processXMLSplit" />
</split>
</route>
<route id="VM01_processXML">
<from uri="vm:processXMLSplit?concurrentConsumers=15" />
<bean ref="Builder" method="createXMLFile" />
<to uri="{{ChangeReceiver}}" />
</route>
我期望使用 VM 或 SEDA 意味着如果拆分器生成 5 条消息,那么我定义的 15 个线程之一将接收这些消息中的每一条。当我调试 Builder class 时,我可以看到消息是按顺序提取的。
如果我使用 VM 或 SEDA,我会看到同样的结果。
谁能告诉我哪里出错了?
备注:
- 骆驼 2.6 由于 JDK 1.5
新信息。
我已将此代码添加到我的 Builder.java
SedaEndpoint seda = (SedaEndpoint) camelContext.getEndpoint("seda:processXMLSplit");
int size = seda.getExchanges().size();
System.out.println("size ["+size+"]");
每次打印大小为 0。
这让我觉得拆分并没有像我预期的那样排队消息。
即使您将 vm 消费者定义为拥有 15 个线程,它也不会影响您的 Split 的工作方式。默认情况下,Split 按顺序工作,因此您必须将 Split 配置为使用 parallelProcessing 以获得您想要的结果。请参阅 Splitter ParallelProcessing。另请注意@Itsallas 评论说您可能需要为您的虚拟机端点配置相同的参数。