То, что вы объясняете, полностью логично для компонента aggregator
.
Вы запрашиваете все файлы в каталоге, группируете их по префиксу имени файла.Это можно сделать с помощью выражения SpEL для correlationKey
для заголовка сообщения FileHeaders.FILENAME
.Таким образом, abc.txt
и abc.txt.checksum
будут сгруппированы вместе.Затем вы можете создать выходное сообщение из aggregator
через MessageGroupProcessor
способом, которым checksum
хранится в заголовке и с исходным файлом в качестве полезной нагрузки для создания одного сообщения.
Впоследствии вы можете использовать свою логику проверки, и нет причин беспокоиться о еще одном обращении к каталогу.
Точка агрегатора, что ни один файл не будет отправляться в нисходящем направлениипока не прибудет его пара.
См. дополнительную информацию в Справочном руководстве: https://docs.spring.io/spring-integration/reference/html/#aggregator
ОБНОВЛЕНИЕ
Поскольку вы говорите о двух файлах (оригинале иконтрольная сумма для него), тогда у вас очень просто ReleaseStrategy
- (group) -> group.size() == 2
.CorrelationStrategy
может основываться на заголовке FileHeaders.FILENAME
, который присутствует вместе с полезной нагрузкой File
после создания FileReadingMessageSource
.Эта логика функции может быть такой:
(message) -> message.getHeaders().get(FileHeaders.FILENAME, String.class).replaceFirst("\.checksum", "")