当前位置: 首页 > 知识库问答 >
问题:

骆驼restlet在POST之后终止而不是返回身体

夏景同
2023-03-14

我正在使用blueprint开发一个camel restlet项目,以部署在Fuse上。它是一个非常简单的HTTP帖子,带有简单的文本正文。我将交换模式设置为inonly

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

我的蓝图是这样的:

 <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个答案

林冥夜
2023-03-14

一个解决方案是使用WireTap模式并立即返回响应,如下所示(注意!我没有执行那个代码,所以要注意可能的错别字)。

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

 类似资料:
  • 我知道有一些方法可以捆绑应用程序并将其部署在Tomcat或Jetty中。但是,如果我这样做了,最大的问题就变成了如何与Restlet集成。 我做了进一步的挖掘。我举了骆驼附带的一个tomcat例子。然后我试着让它具有RESTLET功能。差不多管用了。现在的问题是参数没有传递到路由。我希望当调用这个服务器:http://x.x.x.x.x:8080/rs/user/?name=Paul时,我会得到:

  • 问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b

  • 我试图在Apache Camel中实现以下路径:endpoint1接收消息。路由向endpoint2(清除主体)发起请求。转换器通过使用endpoint2的结果来转换endpoint1的主体,以输入消息。 我尝试了以下几点: 问题是,该主体被消息endpoint2覆盖。我正在考虑将消息体备份到属性中。但什么是最佳实践?

  • 但我的努力没有奏效。 谢谢你的帮助

  • 我试图通过基于TABLE COMPA对TABLE COMPB进行更新和删除操作,使TABLE COMPB等效于TABLE COMPA。代码在生成正确的SQL时工作得非常好。问题是,当循环在第一次迭代中终止时,我将execute语句放在下面的那个一刻。无法理解java中ResultSet的这种行为。有人帮忙吗?我错在哪里?

  • 问题内容: 我正在使用RESTlet,并且已经创建了资源。我通过覆盖方法处理POST 。 客户端应该向我发送一些数据,然后将其存储到DB,将响应设置为201(SUCCESS_CREATED),我需要向客户端返回一些数据,但是返回类型为。 就我而言,我需要返回一些标识符,以便客户端可以访问该资源。 例如,如果我有一个带有URL的资源,并且客户端发送了POST请求,则在DB中添加一个新行,其地址应为。