骆驼 restlet 在 POST 而不是 return 主体之后终止

Camel restlet terminate after POST rather than return body

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

但是,我原以为连接会在实际 post 之后终止,但我收到了一个 200 OK,正文中填充了最后正在处理的任何最终正文。

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

此外,如果处理过程很长 运行 会怎样?我想在数据被 posted 后立即终止,而不是等到上下文中的完整处理。

我的蓝图是这样的:

 <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>

一个解决方案是像这样立即使用 WireTap pattern 和 return 响应(注意!我没有执行该代码,所以请注意可能出现的拼写错误)。

<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 方法将 return 立即只是文本 "OK"。