Я использую Apache Camel и получаю большой файл для ввода, который я должен обрабатывать по строкам. Содержимое уже отсортировано, и мне нужно собрать все последовательные строки с одним и тем же ключом корреляции. Если изменяется корреляционный ключ, предыдущий агрегат должен быть завершен. Если файл завершится, последний агрегат также будет завершен. У меня есть некоторые ограничения: - Поскольку входящий файл довольно большой, мы хотим его обработать потоковым способом. - Поскольку результат предоставляется синхронной конечной точке, я не хочу использовать предикат завершения таймаута. В противном случае я потерял бы противодавление, регулирующее скорость потребления источника данных, и обмены будут накапливаться в тайм-аут-карте и агрегированном хранилище AggregateProcessor.Совокупность только последовательных обменов с одним и тем же ключом корреляции
PreCompletionAwareAggregationStrategy выглядит многообещающим решением, но оказалось, что последний агрегат не будет завершен до появления следующего файла. Если я использую свойство CamelSplitComplete в preComplete, последний агрегат будет завершен, но без последнего входящего обмена. Вместо этого последний обмен будет добавлен в содержимое следующего файла.
Так что в настоящее время я совершенно потерял решение, которое не является излишне уродливым.
Я регистрируемый билет, чтобы увидеть, если мы может получить что-то OOTB, чтобы сделать это проще: https://issues.apache.org/jira/browse/CAMEL-10474 –
Теперь вы можете сделать это через CAMEL-10474. Но я записал еще один билет, чтобы сделать это еще проще: https://issues.apache.org/jira/browse/CAMEL-12296 –