2016-08-21 12 views
2

正常工作駱駝completionSize我有這樣與completionTimeout沒有使用JUnit

line1 
line2 
line3 
line4 
line5 
line6 
line7 
line8 

文件和路徑類似:

.from("direct:start") 
.split().tokenize("\r\n").streaming() 
.process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     System.out.println("Splitter:" + 
      exchange.getIn().getBody(String.class)); 
    } 
}) 
.aggregate(constant(true), new MyAggregationStrategy()) 
.completionSize(3).completionTimeout(10000) 
.process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     int size = exchange.getIn().getBody(Set.class).size(); 
     System.out.println("Processor, Set size:" + size); 
    } 
}) 
.to("mock:end") 

MyAggregationStrategy創建一組與3項。這非常適用於第6行,我得到的輸出是這樣的:

Splitter:line 1 
Splitter:line 2 
Splitter:line 3 
... 
Processor, Set size:3 
... 
Splitter:line 4 
Splitter:line 5 
Splitter:line 6 
... 
Processor, Set size:3 
... 
Splitter:line 7 
Splitter:line 8 

雖然7號線和8號線都在oldExchange在MyAggregationStrategy聚集事後定義的處理器絕不會爲他們。此外completionTimeout不起作用。該代碼立即終止,不等待10秒鐘,不存在的第9行。

任何想法?我認爲這是處理剩餘行不符合completionSize的推薦方式?

由於我們被綁定到Java 6,我們使用駱駝版本2.13.4。

回答

2

找到答案!

僅在JUnit中發生問題原因finish.assertIsSatisfied()立即執行並且不會等待completionTimeout中給出的超時。

使用finish.assertIsSatisfied(long timeoutForEmptyEndpoints) 以高於在completionTimeout給定的值解決我的問題

+0

您可以接受的答案,這樣的問題是不是沒有答案上市?謝謝! –

+1

我想,但系統說「你可以在21小時內接受你自己的答案」。 – nick78

+0

啊,48小時的等待時間必須到位。該死,對不起。 –