Ведение журнала потока интеграции Spring, когда файл не найден - PullRequest
0 голосов
/ 14 апреля 2020

У меня уже есть работающий IntegrationFlow

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) -> {
               }))).publishSubscribeChannel(s -> s
                .subscribe(f -> {
                    ............
                })
                .subscribe(f -> {
                    .......

                })
                .subscribe(f -> f
                        .......
                ))
                .get();

Я пытаюсь войти в систему, если в исходном каталоге нет файла. Я пытался использовать LastModifiedLsEntryFileListFilter, но он срабатывал только при обнаружении файла на сервере.

1 Ответ

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

Хотя вопрос Spring Integration Flow API не отвечает, когда пустой удаленный каталог приходит от другого пользователя, похоже, что вы оба говорите об одном и том же проекте и об одной и той же проблеме.

I Я не могу закрыть этот ваш вопрос, потому что там еще нет голосования по моему ответу, поэтому я просто скопирую / вставлю здесь свой ответ.

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 -pollers

...