我有一个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调用,而不会让线程陷入睡眠模式吗
答案 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>