【问题标题】:Apache camel how to send file name from one router file component to another router file componentApache骆驼如何将文件名从一个路由器文件组件发送到另一个路由器文件组件
【发布时间】:2019-05-31 02:02:10
【问题描述】:

我在 DirA 中有 file1.jpg、file2.jpg、file3.jpg。 我在 DirB 中有 file1.json,file2.json,file3.json

如何创建一个 apache 骆驼文件路由,以便第一个路由从 DirA 中选择 file1.jpg ,处理并将 file1 名称传递给第二个路由,以便它可以读取 file1.json 和进程。

CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
            public void configure() {
from("file:///DirA/?noop=true"). bean(MyBean.class,"doSomeThingWithJPG(${file:absolute.path})").

from("file:///DirB/?noop=true&fileName=${file:name}.json").
bean(AnotherBean.class,"doSomeThingWithJSON(${file:absolute.path})") ;
    } 
 }) 

第二个from (file:///) 组件也指向 DirA 中的文件,而不是 DirB 中的文件

【问题讨论】:

  • 您想从 DirA 读取文件。您想对 DirB 中的文件做什么?是否要从 DirA 中读取并在 DirB 中创建文件?
  • @DariusX。我从 DirA 读取 file.jpg 并上传到 AWS s3。成功上传后,我想将一个 file.json 从 DirB 上传到 s3,其中包含有关 jpg 的元数据。这个元数据文件会触发 lambda 并且上游系统会拉取 jpg 文件。
  • 啊!那么,为什么不让第二条路由简单地监听 DirB 中的所有/任何文件。每当 JSON 文件到达那里时,第二个路由就会处理它。它不需要事先知道名称。
  • @DariusX。我想确保 file1.jpg 已成功上传并且在上传元数据 file1.json 时可用。如果先上传 file1.json 并触发 lambda,则 file1.jpg 尚未上传,会导致问题。所以我需要一个序列,这样 Route1 先启动,然后再启动路由 2。我还需要一种从 route1 文件名部分传递给 route2 的方法

标签: apache-camel spring-camel eip


【解决方案1】:

你可以:

  • 暂存 JSON 文件
  • 编写一个处理器或bean,将命名文件从一个目录复制到另一个目录
  • 在处理 JPG 后调用该处理器,将 JSON 复制到另一个目录
  • 让第二个文件侦听器轮询其他目录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多