Spring Integration Flow API не отвечает, когда пустой удаленный каталог - PullRequest
0 голосов
/ 14 апреля 2020

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

IntegrationFlows.from(Sftp.inboundAdapter(inboundSftp)
            .localDirectory(this.getlocalDirectory(config.getId()))
            .deleteRemoteFiles(true)
            .autoCreateLocalDirectory(true)
            .filter(new CompositeFileListFilter().addFilter(new LastModifiedLsEntryFileListFilter(config.getRegexFilter())))
            .remoteDirectory(config.getInboundDirectory())
            , e -> e.poller(Pollers.cron(config.getCron())
                    .errorChannel(MessageHeaders.ERROR_CHANNEL).errorHandler((ex) -> {
    })))

Я просто хочу поместить в журнал консоли сообщение, чтобы при наличии пустого удаленного каталога оно сообщало, что Пустой удаленный каталог или файлы не найдены. Я потратил много времени на эту проблему и ничего полезного не нашел. Пожалуйста, помогите мне, есть ли способ проверить этот directory.empty () и распечатать наше сообщение.

Ответы [ 2 ]

3 голосов
/ 14 апреля 2020

Sftp.inboundAdapter(inboundSftp) - это SourcePollingChannelAdapter на основе запланированной задачи в соответствии с конфигурацией опроса. Он действительно ничего не производит в outputChannel, если нет данных из источника для создания сообщения. Но дело в том, что задача по триггеру все еще выполняется, и у нас есть несколько приемов, как перехватить эту фазу.

Для этой цели у нас есть компонент AbstractMessageSourceAdvice для его реализации afterReceive(). Это место, где вы можете выполнить свою логику «Пустой удаленный каталог» c. Такой Advice затем должен быть введен в poller(Pollers...advice()).

См. Дополнительную информацию в Документах: https://docs.spring.io/spring-integration/docs/5.3.0.M4/reference/html/core.html#conditional -поллер

1 голос
/ 14 апреля 2020

Используйте исходящий шлюз (с командой LS), чтобы получить список удаленных файлов. Вы получите пустой список, если его нет.

...