在Apache Camel中完成所有批次的所有处理后,如何调用路由?

时间:2019-05-30 03:24:52

标签: apache csv batch-file apache-camel streaming

让我们说我们在一个CSV文件中有10万笔交易/记录。

我们必须处理1000条记录。

处理完所有批次后,调用下一个路由或bean将其保留在DB中的批次中。

在下面的代码中,csvUnmarshalledInstructionsProcessor类验证CSV记录。然后structionProcessor类将事务保留在数据库中。

            from(SPLIT_CSV_CORE_ENDPOINT)

            .routeId(SPLIT_CSV_CORE_ROUTE)

            .transacted()

            .convertBodyTo(String.class, "utf-8")

            .split().tokenize(RouteConstants.NEW_LINE_DELIMITER, tokenGroupSize)

            .aggregationStrategy(new NPDAggregationStrategy())

            .stopOnException().parallelProcessing().shareUnitOfWork().streaming()

            .doTry()

            .unmarshal(csv)

            .bean(csvUnmarshalledInstructionsProcessor)

            .bean(instructionProcessor)

            .doCatch(Exception.class)

            .bean(exceptionPropagator)

            .end()

            .end()

            .end();

第一批中有错误时没有问题。当系统在第一批中发现问题时,它确实会引发异常,并且不会进一步处理。

这里的问题是,如果第一个批次之后的任何批次出现任何验证错误,则代码会保留所有先前有效批次的1000条记录。当系统在一批(在第一批之后)看到无效记录时,我们拒绝文件或有效负载,这使得数据不一致。但是我们还将交易或有效批次的记录保存到数据库中。

那么我们可以首先批量验证记录吗,一旦对所有100K记录进行了验证,是否会调用另一条路线再次将其持久保存?

0 个答案:

没有答案