Как загрузить файл через SFTP внутри цепочки IntegrationFlow с помощью Spring Integration? - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь проверить в моем локальном каталоге исходных файлов новые файлы, выполнить простое преобразование, а затем отправить файлы на удаленный сервер через SFTP с помощью Spring Integration.

Я использую файловый адаптер для опроса моего исходного каталога на предмет новых файлов. Теперь я хочу загрузить файл на удаленный сервер сразу после преобразования. Есть ли обработчик сообщений, который делает именно это, чтобы я мог инициировать загрузку внутри своей цепочки IntegrationFlow или я должен записать файл и загрузить его по SFTP в отдельном процессе (создать запланированное задание только для процесса загрузки)?

    @Bean
    public IntegrationFlow integrationFlow() {
        return IntegrationFlows.from(fileReader(), spec -> spec.poller(Pollers.fixedDelay(1000)))
                .transform(transformer, "transform")
                .handle( message handler )
                .get();
    }

    @Bean
    public FileReadingMessageSource fileReader() {
        FileReadingMessageSource source = new FileReadingMessageSource();
        source.setDirectory(new File("src/main/resources/file/outbox"));
        return source;
    }

Обновлен код:

@Bean
    public IntegrationFlow integrationFlow() {
        return IntegrationFlows.from(fileReader(), spec -> spec.poller(Pollers.fixedDelay(1000)))
                .transform(transformer, "transform")
                .handle(Sftp.outboundAdapter(sftpSessionFactory)
                        .remoteDirectory(sftpRemoteDirectory)
                )
                .get();
    }

1 Ответ

2 голосов
/ 18 марта 2020

Вы на правильном пути. Действительно, для SFTP есть адаптер канала для загрузки полезной нагрузки сообщения в виде файла в удаленный каталог:

handle(Sftp.outboundAdapter(sessionFactory(), FileExistsMode.FAIL)

Подробнее см. В главе SFTP документации Spring Integration:

https://docs.spring.io/spring-integration/docs/current/reference/html/sftp.html#sftp -outbound

...