Camel restlet在POST后终止而不是返回正文

时间:2015-09-19 09:32:08

标签: java apache-camel restlet fuse blueprint

我正在使用蓝图开发一个在Fuse上部署的camel restlet项目。这是一个非常简单的HTTP POST,具有简单的文本正文。我将交换模式设置为Inonly

然而,我期待在实际发布后终止连接,但是我收到了200 OK,身体里面装满了最终处理的最终主体。

这是它的工作方式吗?因此,我是否需要手动清除身体?

此外,如果处理是一个长时间运行的过程会发生什么?我希望在数据发布后直接终止,而不是等到上下文中的完整处理。

我的蓝图看起来像这样:

 <camelContext xmlns="http://camel.apache.org/schema/blueprint">
  <route id="timerToLog">
    <from uri="restlet:http://localhost:7070/arena?restletMethod=POST&amp;exchangePattern=inOnly"/>
    <process ref="marcformatreader"/>
    <log message="${body}" loggingLevel="INFO"/>
    <process ref="marcformatwriter"/>
    <log message="${body}" loggingLevel="INFO"/>
    <to pattern="InOnly" uri="file:C:/Camel/output?fileName=output.mrc"/>
  </route>
</camelContext>

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用WireTap pattern并立即返回响应(注意!我没有执行该代码,因此请注意可能的错别字)。

<camelContext xmlns="http://camel.apache.org/schema/blueprint">
    <route id="timerToLog">
        <from uri="restlet:http://localhost:7070/arena?restletMethod=POST&amp;exchangePattern=inOnly"/>
        <wireTap uri="direct:tap" copy="true"></wireTap>
        <transform>
            <constant>OK</constant>
        </transform>
    </route>

    <route id="wireTapToLog">
        <from uri="direct:tap"/>
        <process ref="marcformatreader"/>
        <log message="${body}" loggingLevel="INFO"/>
        <process ref="marcformatwriter"/>
        <log message="${body}" loggingLevel="INFO"/>
        <to pattern="InOnly" uri="file:C:/Camel/output?fileName=output.mrc"/>
    </route>

</camelContext>

使用WireTap Camel将继续在另一个线程中处理交换,因此POST方法将立即返回文本“OK”。