2014-05-14 50 views
0

我是與Apache Camel合作的新手。你能幫我移動文件嗎?我有這樣的路線:在moveFailed上移動文件不起作用

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}}"); 

所以,用錯誤的文件應該被移動到目錄「失敗」和文件沒有錯誤目錄「成功」。我試圖在聚合所需消息(解析帶有錯誤的文件)時生成異常,以便將文件移動到目錄「失敗」,但所有文件移動到目錄「成功」,即使有異常。

如果我在聚合器之前拋出異常,文件移動到「失敗」目錄但最後「到」(發送郵件)不起作用。

回答

0

如果你有駱駝行動的副本,那麼我建議閱讀第8章有關聚合EIP的信息,以瞭解它是如何工作的,事實上它是一個有狀態的EIP,所以有交換的切換,所以消費者完成。並且聚合器出來的彙總交換獨立於原始消費交換執行。

你也可能想看看由消息處理器EIP,並使用spliiter只有版本

+0

@HelenaBragina購買此書!購買本書!這真的很值得。 – Namphibian