Как сделать так, чтобы CAMEL-файл читал только один сервер?

Я использую camel-jcifs и читаю файл. Все работает нормально. Приложение будет развернуто на четырех экземплярах сервера. Теперь мой вопрос: как я могу убедиться, что только один сервер забирает файл за раз?

 <from id="_from_pop3" uri="smb://myurl?fileName=filename&amp;preMove=inprogress&amp;move=processed"/>

Мне было предложено использовать infinispan и записать в общий кеш, что файл находится в процессе.

Может кто-нибудь предложить другие возможные решения?

С уважением, Сарада.


person Sarada Chelluboyena    schedule 18.10.2017    source источник


Ответы (2)


Да, вам нужно будет использовать кластерный шаблон маршрута. Вы можете найти подробности об этом в книге Camel in Action 2nd edition, глава 17: https://www.manning.com/books/camel-in-action-second-edition

Поскольку camel-jcifs расширяет файловый компонент, вы можете просмотреть существующие в Интернете решения о маршрутах кластеризованных файлов в Apache Camel и использовать аналогичное решение. Например вариант readLockIdempotent (есть пример в книге).

person Claus Ibsen    schedule 19.10.2017

можно попробовать использовать опцию premove в файле / ftp, чтобы переместить файл после того, как он будет найден сервером, это скроет файл от другого сервера, а также он получит блокировку по умолчанию, поэтому другой сервер не может получить доступ, даже если оба пытаются в одну и ту же наносекунду.

person Ramarajan    schedule 25.10.2017