Идемпотентный потребитель с репозиторием JDBC Apache Camel

Я работаю над springboot с Apache Camel, поэтому мой вопрос в том, как я могу написать код для использования Idempotentconsumer с репозиторием JDBC с использованием apache camel.


person Rajeev    schedule 09.11.2016    source источник


Ответы (1)


Все, что вам нужно сделать, это реализовать

#queryForInt(T key)
#insert(T key)
#delete(T key)

методы AbstractJdbcMessageIdRepository из camel-sql

определите свой боб

    <bean id="idempotentRepository"
          class="yourpackage.YourJDBCIdempotentRepository">
        <property name="dataSource" ref="your-datasource-bean-ref"/>
    </bean>

добавить в маршрут

    <route id="your-route">
        <from uri="ftp:your-endpoint?idempotent=true&idempotentRepository=#idempotentRepository"/>
        ...
    </route>

См .: http://camel.apache.org/maven/camel-2.10.0/camel-sql/apidocs/org/apache/camel/processor/idempotent/jdbc/AbstractJdbcMessageIdRepository.html

person Sagar    schedule 14.11.2016
comment
Будет ли использование стандартного JdbcMessageIdRepository работать в распределенной среде с несколькими узлами? Если я посмотрю на страницу Idempotent Consumer Camel (camel.apache.org/idempotent-consumer.html) Я вижу, что HazelcastIdempotentRepository работает в кластерной среде, но является ли это также случаем JdbcMessageIdRepository? Когда я смотрю на код этого компонента в GitHub, я не вижу никаких операторов блокировки (или чего-то еще), чтобы гарантировать синхронизированный доступ? Если бы кто-нибудь мог это подтвердить, было бы здорово! - person Kim Zeevaarders; 20.05.2019
comment
@KimZeevaarders - Думаю, тебе стоит попробовать. Существует некое уникальное ограничение, которое вы должны добавить в таблицу camel_messageprocessed (при использовании репозитория jdbc) - см. Doco. Хотя вроде работает хорошо. - person gurpal2000; 14.03.2020