Camel SEDA和VM端点不使用所有线程

时间:2015-09-25 11:33:10

标签: java apache-camel

我有以下路线......

<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类时,我可以看到消息是按顺序拾取的。

如果我使用VM或SEDA,我会看到相同的内容。

有人可以提出我出错的地方吗?

注意:

  • 由于JDK 1.5而导致的Camel 2.6

新信息。

我已将此代码添加到我的Builder.java

SedaEndpoint seda = (SedaEndpoint) camelContext.getEndpoint("seda:processXMLSplit");
int size = seda.getExchanges().size();
System.out.println("size ["+size+"]");  

每次打印大小为0。

这让我觉得分裂并没有像我预期的那样排队。

1 个答案:

答案 0 :(得分:1)

即使你已经定义了你的vm消费者有15个线程,它也不会影响你的Split工作方式。默认情况下,Split按顺序工作,因此您必须将Split配置为使用 parallelProcessing 才能获得所需的结果。请参阅Splitter ParallelProcessing中的进一步说明。另请注意,@ Itsallas评论说您可能需要使用相同参数配置vm端点。