2015-08-28 4 views
0

Я разделяю некоторые объекты Java, а затем объединяю их. Я немного смущен, как эта стратегия завершения работает с Camel (2.15.2). Я использую размер завершения и тайм-аут завершения. Если я правильно понимаю, таймаут завершения не имеет большого эффекта. Потому что здесь не так много ожидают.Агрегатор Camel не суммирует все

В целом, у меня есть 3000 объектов. Но, кажется, только часть его агрегирована. Но, если я изменяю значение размера завершения, ситуация меняется. Если размер равен 100, он составляет около 800, а если он равен 200, он объединяется примерно до 1600. Но я не знаю размер объектов заранее и поэтому не могу полагаться на предполагаемое число.

Может ли кто-нибудь объяснить мне, что я здесь делаю неправильно? Если я использую eagerCheckCompletion, он объединяет все это за один раз, чего я не хочу. Ниже мой маршрут:

from("direct:specializeddatavalidator") 
     .to("bean:headerFooterValidator").split(body()) 
     .process(rFSStatusUpdater) 
     .process(dataValidator).choice() 
     .when(header("discrepencyList").isNotNull()).to("seda:errorlogger") 
     .otherwise().to("seda:liveupdater").end(); 


    from("seda:liveupdater?concurrentConsumers=4&timeout=5000") 
     .aggregate(simple("${in.header.contentType}"), 
       batchAggregationStrategy()) 
     .completionSize(MAX_RECORDS) 
     .completionTimeout(BATCH_TIME_OUT).to("bean:liveDataUpdater"); 

    from("seda:errorlogger?concurrentConsumers=4") 
     .aggregate(simple("${in.header.contentType}"), 
       batchAggregationStrategy("discrepencyList")) 
     .completionSize(MAX_RECORDS_FOR_ERRORS) 
     .completionTimeout(BATCH_TIME_OUT) 
     .process(errorProcessor).to("bean:liveDataUpdater"); 

ответ

1

Weird, но если вы хотите, чтобы объединить все расщепленные сообщения вы можете просто использовать

.split(body(), batchAggregationStrategy()) 

И в зависимости от того, как вы хотите работать, вы можете использовать

.shareUnitOfWork().stopOnException() 

Смотрите http://camel.apache.org/splitter.html для получения дополнительной информации

+0

Спасибо за ответ. Но, я хотел знать, что случилось с моим! Кажется, если я изменю конечные точки seda на прямые, он начнет работать, как я ожидаю! Не знаю, почему! – Mashrur

+0

Создание простейшего тестового теста и его публикации помогли бы многим :) – J2B

+0

Извините за поздний ответ. Мне жаль, что у меня не было времени сделать простой тестовый пример, чтобы доказать свою точку зрения. Во всяком случае, похоже, что-то было, как работает приложение. Он находился в простом основном классе с использованием метода сна в течение фиксированного времени. И, кроме того, у него не было правильной логики завершения, которую я добавил позже. Я бы поделился некоторым кодом, если кто-то подумает, что это будет полезно для них. – Mashrur

Смежные вопросы