File io 在moveisn';行不通

File io 在moveisn';行不通,file-io,exception-handling,apache-camel,aggregator,File Io,Exception Handling,Apache Camel,Aggregator,我是Apache Camel的新手。你能帮我搬文件吗?我有这样的路线: from("file:data?noop=true?move={{package.success}}&moveFailed={{package.failed}}") .split(ExpressionBuilder.beanExpression(new InvoiceIteratorFactory(), "createIterator")) .strea

我是Apache Camel的新手。你能帮我搬文件吗?我有这样的路线:

from("file:data?noop=true?move={{package.success}}&moveFailed={{package.failed}}")
                .split(ExpressionBuilder.beanExpression(new InvoiceIteratorFactory(), "createIterator"))
                .streaming()
                .process(new ValidatorProcessor())
                .choice()
                .when(new Predicate() {
                    @Override
                    public boolean matches(Exchange exchange) {
                        ..;
                    }
                })
                .to("jpa://...?consumer.transacted=true")
                .otherwise()
                .aggregate(header(PropertyNameConstants.AGGREGATOR_HEADER), new ErrorsAggregationStrategy())
                .completionPredicate(new Predicate() {
                    @Override
                    public boolean matches(Exchange exchange) {
                     ...;
                    }
                })
                .to("smtps://smtp.gmail.com?username={{remote.e-mail}}&password={{remote.password}}");
因此,应该将有错误的文件移动到目录“failed”,将没有错误的文件移动到目录“success”。我尝试在聚合所需的消息后生成异常(在解析有错误的文件时),以便将文件移动到目录“失败”,但所有文件都移动到目录“成功”,即使存在异常


如果我在聚合器之前抛出异常,则文件移动到“failed”目录但最后一个“to”(发送邮件)不起作用。

如果您有一个正在运行的Camel副本,那么我建议阅读第8章关于聚合器EIP的内容,了解它是如何工作的,以及它是一个有状态的EIP,因此存在交换的切换,因此消费者完成。来自聚合器的聚合交换独立于原始的已消费交换执行

此外,您可能希望查看组合消息处理器eip,并使用spliiter only版本


@HelenaBragina买这本书!买这本书!这是值得的。