Верблюд: Flatpack & агрегатор
Я относительно новичок в Camel и предполагаю, что мою проблему можно решить с помощью комбинации FlatPack и агрегации, но я не вижу, как я могу заставить ее работать без написания большого количества кода.
Он начинается с файла фиксированной ширины с 2 столбцами (на самом деле больше, но только 2 имеют отношение): action_id и organisation_id. Файл содержит пару тысяч строк и может содержать дубликаты.
Нужно 2 вещи:
- отфильтровывать строки для определенного action_id (нас интересует только action_id 70)
- дедупликация на основе organisation_id (одна и та же организация может отображаться в нескольких строках)
Буду очень признателен, если кто-нибудь найдет решение или сможет направить меня в правильном направлении.
Ура, Том
ОБНОВИТЬ:
Как упоминалось Клаусом Ибсеном, это также обсуждалось и отвечалось на верблюжьих форумах. Решение для меня было это
<bean id="organisationMemoryRepository"
class="org.apache.camel.processor.idempotent.MemoryIdempotentRepository" />
...
<route id="process-line">
<from uri="flatpack:fixed:kbo.pzmap.xml" />
<convertBodyTo type="java.util.Map"/>
<filter>
<ognl>request.body["ACTION"] == "070"</ognl>
<idempotentConsumer messageIdRepositoryRef="organisationMemoryRepository">
<ognl>request.body["ORGANISATION"]</ognl>
<to uri="log:be.roots.organisation?level=INFO" />
</idempotentConsumer>
</filter>
</route>