You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Camel FTP路由调用删除API后如何保留原FTP入站数据?

解决Camel FTP路由调用删除API后原始数据丢失的问题

问题背景

现有Camel FTP路由可正常处理入站文本文件,调用公司API将数据加载至内部Company表。现在需要在FTP路由触发时先调用删除API清空Company表,但删除API返回的操作信息会覆盖原FTP入站数据,导致后续加载API无法获取原始数据。当前路由代码如下:

<route id="import-data-from-ftp">
  <from uri="ftp:............................."/> <!-- Step 1 -->
  <to uri="api:deleteData............................."/> <!-- Step 2 -->
  <to uri="api:loadData............................."/> <!-- Step 3 -->
</route>

可行实现方法

方法1:将原始数据存入Exchange属性后恢复

在调用删除API前,把FTP传入的原始数据保存到Exchange的属性中,调用完删除API后再将属性中的数据恢复到消息体,这样原始数据不会被覆盖。修改后的路由代码:

<route id="import-data-from-ftp">
  <from uri="ftp:............................."/> <!-- Step 1 -->
  <!-- 保存原始FTP数据到Exchange属性 -->
  <setProperty propertyName="OriginalFtpContent">
    <simple>${body}</simple>
  </setProperty>
  <!-- 调用删除API,此时消息体被替换为删除结果 -->
  <to uri="api:deleteData............................."/> <!-- Step 2 -->
  <!-- 把保存的原始数据恢复到消息体 -->
  <setBody>
    <simple>${exchangeProperty.OriginalFtpContent}</simple>
  </setBody>
  <!-- 调用加载API,使用原始FTP数据 -->
  <to uri="api:loadData............................."/> <!-- Step 3 -->
</route>

方法2:使用enrich组件同步调用并保留原始消息

enrich组件支持同步调用外部服务(删除API),但默认会保留原始的消息体,仅将调用结果存入指定的Header或Property中,无需手动恢复数据。示例代码:

<route id="import-data-from-ftp">
  <from uri="ftp:............................."/> <!-- Step 1 -->
  <!-- 调用删除API,将返回结果存入DeleteResult Header,原始body保持不变 -->
  <enrich uri="api:deleteData.............................">
    <headerFilterStrategy>
      <include>DeleteResult</include>
    </headerFilterStrategy>
  </enrich>
  <!-- 直接调用加载API,使用原始FTP数据 -->
  <to uri="api:loadData............................."/> <!-- Step 3 -->
</route>

注:如果不需要保留删除API的返回结果,也可以简化enrich的配置,只指定调用URI即可。

方法3:异步调用删除API(无需等待结果场景)

如果删除API的执行不需要同步等待完成即可启动加载流程,可以使用wireTap异步调用删除API,主流程直接使用原始FTP数据执行加载操作,完全避免消息体被覆盖。示例代码:

<route id="import-data-from-ftp">
  <from uri="ftp:............................."/> <!-- Step 1 -->
  <!-- 异步调用删除API,不阻塞主流程 -->
  <wireTap uri="api:deleteData............................."/>
  <!-- 直接调用加载API,使用原始FTP数据 -->
  <to uri="api:loadData............................."/> <!-- Step 3 -->
</route>

注意:此方法适用于删除操作不影响加载逻辑的场景,比如删除操作是异步执行且无需确认结果。

内容的提问来源于stack exchange,提问作者R M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:40:23