0

在 spring 集成中,我想从不同的源目录(配置的每个接口都有不同的源目录)轮询文件,这些文件在 yml 文件(动态)中配置为 sourcePath,如下所示。用户可以添加 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>

有人可以就此提供建议还是有其他方法也可以实现相同的目标

4

1 回答 1

1

是的,您可以使用单个<file:inbound-channel-adapter>来完成此任务。要使其在目录列表上循环进行扫描,您需要为该适配器配置一个AbstractMessageSourceAdvice实现,以在获得接收操作<poller>时更改目录。因此,这样下一次投票将获得一个新的扫描目录。afterReceive(boolean messageReceived, MessageSource<?> source)false

作为示例,您可以查看最近引入的一个RotatingServerAdvicehttps ://github.com/spring-projects/spring-integration/blob/master/spring-integration-file/src/main/java/org/springframework/集成/文件/远程/aop/RotatingServerAdvice.java

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

于 2018-09-04T13:33:41.547 回答