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

Я работаю над заменой данных в файле (это большой файл размером 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

person S Boot    schedule 10.05.2018    source источник
comment
у вас есть конкретный бизнес-кейс, который вам нужен, fileExist=Append в вашем первом маршруте и удаление его во втором маршруте. Я бы предложил в первом маршруте fileExist=Override и использовать tempFileName=tmpFile_${file:name}, чтобы записывался временный файл. Или вы можете использовать параметр doneFileName в первом маршруте, а во втором маршруте выбрать файл, когда doneFileName существует.   -  person Neeraj    schedule 10.05.2018
comment
@Neeraj: мне нужно fileExist=Append, потому что я пишу данные в патронах 999, и я делаю это, потому что это очень большой файл. Я пробовал с tempFileName, но это не сработало, поскольку Camel не позволяет (fileExist и tempFileName) использовать обе опции одновременно.   -  person S Boot    schedule 10.05.2018
comment
Требование этого вопроса довольно близко к этому   -  person hk6279    schedule 11.05.2018


Ответы (1)


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

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

См. Документы Camel для файлов компонент и перейдите к главе Using done files.

person burki    schedule 11.05.2018