Camel File Consumer, когда папка недоступна

Привет всем,

при использовании потребителя файлов в папке, к которой у контекста верблюда нет доступа (например, при использовании chmod a-rwx test/locked), контекст запускается как обычно (даже без предупреждений), но также не подхватывает файлы в папке (ну, как следует Это).

Есть ли способ, чтобы файловый компонент выдавал ошибку при запуске (или, по крайней мере, при опросе папки), когда он не может получить доступ к папке?

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

Спасибо и приветствую
Крис


person Chris    schedule 30.04.2019    source источник
comment
Нет, в настоящее время такой поддержки нет. Вы имеете в виду начальный каталог, который вы установили в конечной точке файла верблюда? Возможно, мы могли бы добавить поддержку для этого. Вы можете войти в JIRA и поработать над патчем/PR для такой новой функции.   -  person Claus Ibsen    schedule 30.04.2019


Ответы (2)


В противном случае перед настройкой маршрута мне придется проверять его вручную с помощью Java-кода, чего я хотел бы избежать.

Вы можете использовать PollingConsumerPollStrategy с конечной точкой, чтобы проверить, есть ли у пути проблемы с доступом, а затем вызвать ошибку.

public class FileAccessPollingConsumerPollStrategy extends DefaultPollingConsumerPollStrategy{
   public boolean begin(Consumer consumer, Endpoint endpoint) {

File pollingDirectory = ((FileEndpoint) endpoint).getFile();

//check your access with poillingDirectory and raise any error.

        return true;
    }
}

Затем настройте конечную точку верблюда — from("file://inbox/?pollStrategy=#fileAccessPollingConsumerPollStrategy")

person deo    schedule 30.04.2019
comment
Ах, хороший момент, вероятно, где мы могли бы рассмотреть возможность добавления такой функциональности в реализацию по умолчанию. - person Claus Ibsen; 01.05.2019
comment
Если я правильно понимаю pollStrategy, то этот код выполняется каждый раз, когда выполняется опрос (с компонентами файла по умолчанию, равными половине секунды), что означает, что ошибка возникает дважды в секунду и спамит журнал, с альтернативой является остановка маршрута (или даже контекста) в этом коде, что на самом деле не кажется хорошей идеей... Есть ли что-то, что я упускаю? - person Chris; 02.05.2019
comment
Да, это правильно, так что вы хотите, чтобы это произошло только один раз во время запуска, и заставить Camel не запускаться все вместе? - person Claus Ibsen; 02.05.2019
comment
Я думаю, вы можете ввести контроллер маршрутизатора или контекст верблюда, чтобы остановить маршрут в методе begin () FileAccessPollingConsumerPollStrategy, если он сталкивается с проблемой доступа. Кстати, @Claus-Ibsen — легенда верблюжьего мира, возможно, у него есть предложение получше. - person deo; 02.05.2019

Я решил выполнить следующий код до настройки маршрута и, таким образом, убедиться, что к нему можно получить доступ:

Path path = Paths.get(folderPath);
// The only case we do not allow is when the folder exists and is not readable
boolean canAccess = !Files.exists(path) || Files.isReadable(path);
if (!canAccess) {
  throw new IllegalArgumentException("Could not initialize route, because folder \""
      + baseFolder + "\" can not be accessed. This might happen when it does not exist "
      + "or there are no read permission for the current user");
}

Я также создал задачу в apache jira, чтобы добавить эту функцию в будущем:
https://issues.apache.org/jira/browse/CAMEL-13483

Всем спасибо за предложения
Крис

person Chris    schedule 06.05.2019