Я использую Camel для записи ряда строк (100 000 с) в набор текстовых файлов.
Код ниже показывает мой верблюжий маршрут:
from("seda:fileOutputMatchedMsgClose?concurrentConsumers=44")
.to("file:MATCHED_CLOSE?fileExist=Append")
.end();
Итак, в основном, у меня есть компонент-производитель, который создает эти строки из объектов, обработанных в последующем. Я устанавливаю имя файла в заголовке как часть метода sendbody и заголовочного компонента. Итак, у меня есть 22 файла, в которые пишутся (все в папке MATCHED_CLOSE). Все сообщения для этих 22 файлов отправляются одной конечной точке SEDA (fileOutputMatchedMsgClose).
Проблема в том, что приложение отправляет около 440 строк в эту конечную точку SEDA в секунду. И, глядя на размер очереди fileOutputMatchedMsgClose в JConsole, он продолжает расти вместе с использованием памяти. Так что, похоже, здесь немного бутылочного горлышка.
Если у кого-нибудь есть какие-либо рекомендации о том, как повысить производительность, запись в файл каждой из 440 строк составляет около 280 символов, совсем не так много. Поэтому я предполагаю, что вопрос заключается в том, есть ли какие-либо оптимизации, которые я могу сделать, чтобы повысить производительность файлового компонента в Camel (возможно, сделать несколько маршрутов для каждого файла (что было бы проблематично), или я должен просто написать свой собственный файловый компонент IO, который обрабатывает это?
Ура!