Конфигурация входящего адаптера NFS для нескольких каталогов с использованием одного входящего адаптера - PullRequest
0 голосов
/ 03 сентября 2018

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

 interfaces:
      -
        sourceType: NFS
        sourcePath: /Interface-1/Inbound/text
        target: Interface-1
        targetType: S3
        targetPath: test-bucket-1
      -
        sourceType: NFS
        sourcePath: /Interface-2/Inbound/text
        target: Interface-2
        targetType: S3
        targetPath: test-bucket-2

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

В настоящее время приложение опрашивает файлы из базовой директории.

   <file:inbound-channel-adapter id="filesInboundChannel"
    directory="file:${base.path}" auto-startup="false" scanner="scanner" auto-create-directory="true">

    <integration:poller id="poller" max-messages-per-poll="${max.messages.per.poll}" fixed-rate="${message.read.frequency}" task-executor="pollingExecutor">
        <integration:transactional transaction-manager="transactionManager" />
    </integration:poller>       
  </file:inbound-channel-adapter>

Может ли кто-то дать совет по этому поводу или есть ли другой способ также достичь той же цели

1 Ответ

0 голосов
/ 04 сентября 2018

Да, вы можете использовать один <file:inbound-channel-adapter> для этой задачи. Чтобы повернул по списку каталогов для сканирования, вам необходимо настроить реализацию AbstractMessageSourceAdvice для <poller> этого адаптера, чтобы изменить каталог, когда afterReceive(boolean messageReceived, MessageSource<?> source) получает false для получения. операция. Таким образом, при следующем опросе будет получен новый каталог для сканирования.

В качестве примера вы можете взглянуть на недавно представленный RotatingServerAdvice: https://github.com/spring-projects/spring-integration/blob/master/spring-integration-file/src/main/java/org/springframework/integration/file/remote/aop/RotatingServerAdvice.java

https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-channels-section.html#conditional-pollers

...