java - 将 Apache Camel CSV 与拆分器模式相结合

标签 java csv apache-camel splitter

我有一个大型 CSV 文件,我想对其进行速率限制处理。 Splitter Pattern提供了我正在寻找的东西,只是我不太清楚如何将它与 CSV Component 结合起来.

从拆分器文档中,您可以处理 CSV,例如:

from("file:inbox")
  .split().tokenize("\n", 1000).streaming()
     .to("activemq:queue:order");

但理想情况下,我想利用 Apache Camel CSV 组件来处理混搭,做一些更像这样的事情:

from("file:inbox")
    .unmarshal().csv().split()
    .streaming().parallelProcessing()
    .throttle(requestsPerSecond)
    .bean(new ValidateProcess(), "validate")
    .marshal().csv().to("file:outbox");

我知道上面的代码是完全错误的,但希望它传达了我想要实现的目标。这是否可行?

最佳答案

由于某种原因,我之前无法弄清楚这一点,我认为我的类路径存在问题,没有获取对 org.apache.camel:camel-csv 的依赖项。一旦我解决了这个问题,一切都很好。

这就是我最终得到的结果:

final CsvDataFormat csv = new CsvDataFormat(";");
csv.setLazyLoad(true);
csv.setSkipFirstLine(true);

from(in).unmarshal(csv).split(body()).streaming().parallelProcessing()
                    .bean(validator, "validateNumber")
                    .filter(header(ValidateProcess.Valid).isEqualTo(true))
                    .throttle(tps).bean(validator, "validate")
                    .marshal().csv()
                    .to(out).log("done.").end();

基本上,我想针对速率限制为 50 TPS 的 API 流式处理包含数字的 CSV,并将结果输出到 csv 文件。

关于java - 将 Apache Camel CSV 与拆分器模式相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657368/

相关文章:

java - Apache Camel - 指定要使用的转换器

java - 在队列中保留和锁定消息的策略,其中一个消费者隐藏多个用户

Java Swing - 通知 GUI 有关模型的更改

java - 使用 jasper 和 servlet 创建 pdf 报告

mysql - 用于导出的 INTO OUTFILE 查询在本地驱动器上不起作用

php - 使用从数组中提取的 ID 向用户发送电子邮件

java - Groovy 中的闭包 - 用等效的 Java 实现

java - jbyteArray 和 jbyte 指针的区别

r - 如何通过合并 csv 文件创建数据框,然后基于它创建 Shiny 的应用程序?

java - 在 Apache Camel 中从 Json 检索对象