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,我会看到同样的结果。

谁能告诉我哪里出错了?

备注:


新信息。

我已将此代码添加到我的 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 评论说您可能需要为您的虚拟机端点配置相同的参数。