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

时间:2016-05-16 20:22:15

标签: java ftp apache-camel camel-ftp

我有这个需要不时执行的同步管道(假设每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. 结束路线。
  9. 它是使用Java DSL创建的单个管道。如果发生错误,则该过程停止。 我真的在与Camel挣扎来创造这个。有可能或我需要手动处理吗?我创建了一些演示,但没有一个能正常工作。

    任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

对于您的3条路线中的每条路线,您都会遇到以下情况:

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

您可以通过扩展程序here

找到有关过滤文件的详细信息

答案 1 :(得分:1)

我会按以下方式处理:

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

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

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

  4. 通过这种方式,您可以自定义错误处理,更容易找出出错的地方,更轻松地更改一个部件而不会影响所有部分,并且您可以在多个不同部分重复使用这些路径。