Конфигурация входящего адаптера NFS для нескольких каталогов с использованием одного входящего адаптера

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

 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)


Да, вы можете использовать один <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

person Artem Bilan    schedule 04.09.2018