如何使用 Camel 和 Java DSL 创建具有多个连接 ftp 调用的路由?

How can I create a route with multiple connected ftp calls using Camel and Java DSL?

我有这个需要不时执行的同步管道(比如说每 30 分钟):

  1. 连接到 ftp;
  2. 从文件夹 A 中读取 .json 文件(单个文件);
  3. 解组文件内容 (Class A) 并将其添加到路由上下文;
  4. 从文件夹 B 中读取所有 .fixedlenght 个文件(多个文件)(preMove:processingFolder,move:doneFolder,moveFailed:errorFolder);
  5. 解组文件内容 (Class B) 并做一些逻辑;
  6. 从文件夹C读取所有.xml个文件(多个文件)(preMove:processingFolder,move:doneFolder,moveFailed:errorFolder);
  7. 解组文件内容 (Class C) 并做一些逻辑;
  8. 结束路线。

它是使用 Java DSL 创建的单个管道。如果发生错误,该过程将停止。 我真的很难用骆驼来创造这个。有可能还是我需要手动处理?我创建了一些演示,但其中 none 个可以正常工作。

如有任何帮助,我们将不胜感激。

按照您描述消息管道的方式,让 3 条单独的路由各自处理 FTP 服务器中的不同文件夹似乎是有益的。您可以有一个计时器,每 30 分钟触发一次所有 3 个。 FTP 组件派生自 Camel 的 File Component,这里有很多有用的参数可以帮助您处理路由逻辑。

对于你的 3 条路线中的每一条,你都会有这样的东西:

from("ftp://foo@myserver?include=*.xml&preMove=processingFolder&move=doneFolder&moveFailed=errorFolder")
    .unmarshal()
    ...

您可以找到有关按扩展名过滤文件的更多信息here

我将按以下方式处理此问题:

  1. 你读取文件的FTP的所有接口都是单独的路由。他们的工作只是拿起文件。它们不处理解析或转换。

  2. 然后创建单独的路由用于实际接收数据、解析和转换。

  3. 最后是将数据传送到您的最终目的地的传送路线。

通过这种方式,您可以自定义错误处理,更容易找出问题所在,更容易更改一个部分而不影响所有内容,并且您可以在多个不同部分重用路由。