Идемпотентный потребитель Apache Camel для файла

У меня есть один физический сервер, на котором работают два экземпляра Apache Camel. Оба содержат одинаковые артефакты интеграции. Задача состоит в том, чтобы интегрировать файлы из файловой системы сервера с файловым компонентом Apache Camel, запускаемым заданием cron. Обработка файла должна выполняться только один раз. Поэтому я использую идемпотентный шаблон с репозиторием Jdbc на том же сервере.

В целом работает нормально. Но иногда, в некоторых случаях, оба экземпляра запускают и читают файл, поэтому файл обрабатывается дважды. В базе данных JDBC ключ также вставляется дважды (даже метка времени создания почти такая же; она отличается на третьей цифре миллисекунд).

Вот как я использую потребителя файлов:

<from uri="file:{{property.file.directory}}?scheduler=quartz2
                    &;scheduler.cron={{property.file.cronjob}}?
                    &idempotent=true
                    &readLock=idempotent
                    &idempotentKey=${file:name}-${file:size}-${date:file:yyyy-MM}
                    &idempotentRepository=#idempotentRepository"/>

Кто-нибудь знает, что мне нужно, чтобы файл был готов только один раз ??

С уважением, Ян


person ian_eve    schedule 10.07.2020    source источник


Ответы (1)


Вы можете использовать кластерный кварц для своего сценария. http://www.quartz-scheduler.org/documentation/quartz-1.8.6/configuration/ConfigJDBCJobStoreClustering.html

person VarunKrish    schedule 12.07.2020