Camel EIP для фильтрации дубликатов
У меня есть верблюжий маршрут, который выводит сообщение из очереди, отправляет его компоненту для обработки, а затем помещает сообщение обратно в другую очередь.
Я пытаюсь устранить "повторяющиеся сообщения" во 2-й очереди. Есть ли у Camel какие-либо конечные точки, процессоры, EIP и т. Д., Которые я мог бы настроить для дедупликации сообщений в пути до их отправки во 2-ю очередь?
Пример:
<route id="myRoute">
<from uri="{{queue-1-uri}}" />
<to uri="bean:myBean?method=process" />
<!-- How to dedupe right here??? -->
<to uri="{{queue-2-uri}}" />
</route>
Обновление: возможно что-то вроде этого:
<route id="myRoute">
<from uri="{{queue-1-uri}}" />
<to uri="bean:myBean?method=process" />
<filter>
<method>what goes here???</method>
<to uri="{{queue-2-uri}}" />
</filter>
</route>
По предложению Ральфа я мог бы сослаться на боб внутри <method></method>
который затем использовал кеш для хранения сообщений в памяти.
Скажи, что этот новый бин был назван FilterBean
и это было dedupe()
метод для этого: как мне подключить его в Spring XML и какие классы / интерфейсы нужно реализовать компоненту для вызова изнутри маршрута?
1 ответ
Я думаю, что вы ищете Idempotent Consumer
что верблюд обеспечивает. Есть разные подходы в зависимости от ваших потребностей, таких как память, JDBC
, Hazelcast
... Я не совсем уверен, будет ли это работать для вас, так как вы используете bean
после потребителя, но стоит попробовать. Простой пример с сайта Camel выглядит следующим образом:
<!-- repository for the idempotent consumer -->
<bean id="myRepo" class="org.apache.camel.processor.idempotent.MemoryIdempotentRepository"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
<idempotentConsumer messageIdRepositoryRef="myRepo">
<!-- use the messageId header as key for identifying duplicate messages -->
<header>messageId</header>
<!-- if not a duplicate send it to this mock endpoint -->
<to uri="mock:result"/>
</idempotentConsumer>
</route>
</camelContext>
Вы можете найти больше информации здесь: Идемпотент Потребитель