Java 使用apache camel基于文件中的元数据处理数据

Java 使用apache camel基于文件中的元数据处理数据,java,file-io,apache-camel,Java,File Io,Apache Camel,我必须设置camel来处理数据文件,其中文件的第一行是元数据,随后是数百万行实际数据。元数据指示如何处理数据。我要找的是这样的东西: 读取第一行(元数据)并填充bean(使用元数据)-->2。然后一次向数据处理器发送1000行数据,数据处理器将引用步骤1中的bean 在Apache Camel中可能吗?是的 示例体系结构可能如下所示: 您可以设置一个简单的队列,其中可以填充文件名(或用于定位每个文件的任何标识符) 从队列中,您可以通过消息转换器bean进行路由,消息转换器bean的唯一任务是将文

我必须设置camel来处理数据文件,其中文件的第一行是元数据,随后是数百万行实际数据。元数据指示如何处理数据。我要找的是这样的东西:

读取第一行(元数据)并填充bean(使用元数据)-->2。然后一次向数据处理器发送1000行数据,数据处理器将引用步骤1中的bean

在Apache Camel中可能吗?

是的

示例体系结构可能如下所示:

  • 您可以设置一个简单的队列,其中可以填充文件名(或用于定位每个文件的任何标识符)
  • 从队列中,您可以通过消息转换器bean进行路由,消息转换器bean的唯一任务是将文件名请求转换为包含文件第一行元数据的POJO
  • (这里有几个选项)
    • 处理1000行集合的方法将取决于是否需要将从1000行集合创建的输出或结果数据重新组合为单个消息,并在以后再次处理。如果是这样,您可以实现一个由消息生产者/消费者、消息聚合器和路由器组成的复合消息处理器。消息生产者/消费者将接收带有在步骤2中创建的元数据的POJO,并排队处理文件中所有行所需的许多新请求。路由器将从此队列通过处理管道路由到消息聚合器。聚合后,一条包含所有重要数据的统一消息将可供您执行所需操作
    • 相反,如果每个1000行集可以独立处理,并且不需要重新加入,则无需对消息进行聚合。相反,您可以使用路由器从步骤2路由到生产者/消费者,后者将像上面一样为每个文件生成必要数量的新请求。最后,路由器将从最后一个队列路由到执行处理的使用者
  • 由于您需要处理大量数据,因此可能很难通过消息传递大约1000行数据组,特别是当它们被放入队列时(您不希望内存耗尽)。我建议传递一些类型的指示符,这些指示符可用于识别特定请求针对的是文件的哪一行,然后在需要时解析1000行。您可以通过多种方式来实现这一点,比如通过计算文件中特定行的字节数,然后在请求到达将处理该行的bean时,使用文件读取器的skip()方法跳转到该行

    以下是Apache Camel网站上提供的一些资源,它们描述了我上面提到的企业集成模式:


    感谢您的详细回复!我去看看!