2016-12-22 9 views
0

У меня есть следующие настройки верблюжьих маршрутов:Camel Ионообменных свойства потеряли во время раскола

<route id="firstRoute"> 
    <from uri="..." /> 

    <!-- This processor puts a list of items as the out body --> 
    <process ref="collectItemsProcessor" /> 

    <!-- Now all items should be processed one by one: --> 
    <split> 
     <simple>${body}</simple> 
     <to uri="direct:secondRoute" /> 
    </split> 
</route> 

<route id="secondRoute"> 
    <from uri="direct:secondRoute" /> 

    <process ref="itemProcessor" /> 
</route> 

В itemProcessor Я хочу, чтобы подсчитать количество элементов, которые были успешно обработаны, помещая собственность в обмен:

exchange.setProperty("PROCESSED_ITEMS", exchange.getProperty("PROCESSED_ITEMS", Integer.class) + 1); 

По какой-то причине при каждом вызове процессора свойство снова имеет значение null. Документация говорит:

Биржа также проводит мета-данные в течение всего срока его службы, хранящейся в свойства доступны с использованием различных GetProperty (String) методы.

https://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Exchange.html

При установке свойства первоначально в collectItemsProcessor, это значение сохраняется. Я подозреваю, что обмен скопирован для каждого вызова на разделенный маршрут, но как я могу тогда действительно хранить «метаданные на протяжении всей жизни»?

ответ

1

Сплит создает новый обмен для каждого элемента. Время жизни этого обмена охватывает только то, что находится внутри элемента split.

Если вам нужен только счетчик обрабатываемых элементов, просто используйте свойство «CamelSplitIndex». Сплиттер автоматически заполняет это свойство.