#file #apache-camel #idempotent
#файл #apache-camel #идемпотентный
Вопрос:
В чем именно разница между idempotentRepository и InProgressRepository? У меня есть следующие определения со страницы компонента файла:
- idempotentRepository: «Возможность использовать шаблон EIP идемпотентного потребителя, чтобы позволить Camel пропускать уже обработанные файлы»
- InProgressRepository: «Репозиторий в процессе выполнения используется для учета текущих файлов в процессе использования».
Для меня это те же определения, только немного по-другому сформулированные. Они также могут использовать один и тот же идемпотентный репозиторий.
Итак, я немного смущен, нужны ли мне оба? Или idempotentRepository достаточно хорош?
Ответ №1:
Прежде чем читать нижеприведенную информацию, убедитесь, что вы прочитали и поняли концепцию idempotent.
idempotentRepository — место, используемое для хранения кэша уже обработанного файла (т. Е. Файлы были использованы и обработаны вашим маршрутом). Используется при проверке идемпотентной функции.
InProgressRepository — место, используемое для хранения кэша текущего файла в процессе выполнения (т. Е. Файлов, Которые будут использоваться в текущем пакете). Всегда используется для потребителя файлов.
IMO, всегда нужен InProgressRepository и с настройкой по умолчанию (репозиторий на основе памяти) в целом. Может потребоваться idempotentRepository, если требуется idempotent, и выбрать свои собственные настройки (на основе файлов, на основе JPA, …) для предотвращения перезапуска приложения.
Комментарии:
1. Это намного лучше объяснено! Но все же есть несколько вопросов: будут ли 2 файловых компонента сначала проверять InProgressRepository, чтобы узнать, использует ли другой файловый компонент файл (конечно, только если это общий репозиторий)? Какова тогда цель идемпотентного InProgressRepository?
2. Никогда не меняйте настройку для InProgressRepository, возможно, вам придется протестировать его самостоятельно или выполнить поиск в Интернете или задать другой пост.