Как заблокировать запись файла, чтобы другой потребитель не мог потреблять

Я работаю над заменой данных в файле (это большой файл размером 400 МБ) с помощью верблюда, и я сталкиваюсь с проблемой, когда файл другого потребительского пикапа используется, даже если файл используется (он находится в режиме записи).

Есть ли способ в Camel для блокировки файла, который находится в режиме записи, чтобы другой потребитель / маршрут не мог потреблять. Это должно потреблять, как только запись сделана. Я пытался с readLocks, но пока не повезло.

from("file://A").split().tokenize("\n", 999).streaming()
.log("Spliting::::::::::").unmarshal(csv).bean("transferDate", "enrich")
.marshal(csv).to("file://B?fileExist=Append");

from("file://B?delete=true").to("file://A"); // this route pick up file even the first route haven't finished writing file completely

2 ответа

Вам следует настроить маршрут Camel с соответствующими параметрами для чтения и записи файлов. В частности, вам необходимо установить параметры readLock и readLockTimeout для конечной точки файла.

       from("file:/input-directory")
        .routeId("fileRoute")
        .to("file:/output-directory?readLock=changed&readLockTimeout=5000")
        .log("File processed: ${file:name}")
        .end();

Вы можете использовать готовые файлы. Если вы настраиваете их в приемнике файлов, он игнорирует все файлы до тех пор, пока рядом с реальным файлом не окажется готовый файл (или маркер).

Вы также можете настроить производителя файлов для создания готовых файлов.

Посмотрите компонент Camel Docs for File и перейдите к главе Using done files,

Другие вопросы по тегам