如何使用Apache Camel处理长时间运行的任务

时间:2015-10-09 14:57:34

标签: java multithreading apache-camel

我有一个Camel root,它在root的中间执行HTTP调用,以丰富交换中的主要对象:

     <route>
        <from uri="http:somerestcall"/> 
        <bean ref="jsonUtils" method="someJsonConversion"/>
        <split>
            <simple>body</simple>
            <!-- this is the one -->
            <bean ref="enrichmentBean" method="someAdditionalHTTPCall"/>
        </split>
        <to uri="writetosomequeue"/>
    </route>

我知道Camel提供了很多asynchronous functionality - 如何最好地利用Camel来处理路由中间可能长时间运行的HTTP调用,而不会让线程陷入睡眠模式吗

1 个答案:

答案 0 :(得分:1)

这个问题在某种程度上是特定于应用程序的,如果你的线程正在等待来自HTTP请求的响应并且需要继续这些信息,我只是让这个过程更加平行并让线程什么都不做。如果线程没有工作,无论如何都不浪费真正的cpu。但是,如果您的进程可以在等待http调用时继续工作,那么我建议将其发送到seda路由进行查找调用,然后将结果存储在稍后可以访问的位置,就像您可以参考结果的并发映射一样基于某种关键。

<route>
    <from uri="http:somerestcall"/> 
    <bean ref="jsonUtils" method="someJsonConversion"/>
    <split>
        <simple>body</simple>
        <!-- this is the one -->
        <to uri="seda:concurrentFun" />
    </split>
    <to uri="Lots of other work" />
    <bean ref="StorageBean" method="enrichFromStoreAndRemove" />
    <to uri="writetosomequeue"/>
</route>

<route>
    <From uri="seda:concurrentFun" />
    <bean ref="enrichmentBean" method="someAdditionalHTTPCall"/>
    <bean ref="StorageBean" method="store" />
</route>