Источники файлов среднего потока с помощью Spring Integration DSL - PullRequest
2 голосов
/ 28 июня 2019

Мне нужно создать поток, который всякий раз, когда файл принимается в папке, он выбирает некоторые другие ранее существующие файлы из другой папки, преобразует их все (включая вновь полученные), используя то же самое transformer, а затем агрегирует их для создания одного вывода. Я полагаю, что мог бы использовать splitter - aggregator подход для выполнения шагов преобразования и агрегирования; но я не знаю, какой тип компонента SI (если есть) я мог бы использовать для объединения нового файла (того, который получен из исходного MessageSource, который запускает выполнение потока) с существующими в том же потоке.

В проекте, над которым я работаю, используются spring-integration-core-5.0.11.RELEASE и spring-integration-file-5.0.11.RELEASE, и мы создаем потоки с помощью Spring Integration DSL.

1 Ответ

2 голосов
/ 28 июня 2019

Пожалуйста, рассмотрите возможность использования..enrich() EIP-метод:

<code>/**
 * Populate a {@link org.springframework.integration.transformer.ContentEnricher}
 * to the current integration flow position
 * with provided options.
 * Typically used with a Java 8 Lambda expression:
 * <pre class="code">
 * {@code
 *  .enrich(e -> e.requestChannel("enrichChannel")
 *                  .requestPayload(Message::getPayload)
 *                  .shouldClonePayload(false)
 *                  .autoStartup(false)
 *                  .<Map<String, String>>headerFunction("foo", m -> m.getPayload().get("name")))
 * }
 * 
* @param enricherConfigurer {@link Consumer} для предоставления * {@link org.springframework.integration.transformer.ContentEnricher} параметров.* @ возврат текущего {@link IntegrationFlowDefinition}.* @see EnricherSpec * / public B enrich (Consumer enricherConfigurer) {

Таким образом, вы можете вызывать все, что вам нужно, на основании сообщений запроса и сохранять все в выходной полезной нагрузке.

Более подробную информацию о Enricher см. В Справочном руководстве .

Также вы можете ознакомиться с sample .Я знаю, что один на XML-конфигурации, но принцип тот же.

ОБНОВЛЕНИЕ

Для этого трюка вам нужно обернуть ваш запрос File в Collection (List, конечно) и все остальные файлы, которые вы 'просто добавьте в эту коллекцию простое выражение addAll().

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...