我正在使用蓝图开发一个在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&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>
答案 0 :(得分:1)
一种解决方案是使用WireTap pattern并立即返回响应(注意!我没有执行该代码,因此请注意可能的错别字)。
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<route id="timerToLog">
<from uri="restlet:http://localhost:7070/arena?restletMethod=POST&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”。