Есть ли способ добавить строку, используя исходящий соединитель файла мула в существующем файле? Имея это требование обработки миллионов сообщений и добавления новой строки данных в файл для каждого сообщения. Каков наиболее оптимизированный подход для достижения этого с использованием исходящего файла в Mule.
Mule: добавление строк в файл для системы обмена сообщениями на основе мулов.
Ответы (2)
Всякий раз, когда вы хотите добавить строки в уже существующий файл, вы можете установить для атрибута «outputAppend» значение true.
<file:connector name="File" autoDelete="true"
outputAppend="true" streaming="true" validateConnections="true"
doc:name="File" />
Кроме того, вы можете использовать пакетный модуль для обработки миллионов сообщений. Для получения дополнительной информации проверьте: http://www.mulesoft.org/documentation/display/current/Batch+Processing
То, что Клэр сказала о outputAppend="true"
, верно, но учтите, что при его использовании максимальное количество активных диспетчеров снижается до 1, что может серьезно повлиять на производительность. С другой стороны, я предполагаю, что вы хотите взять файл и просто добавить некоторый контент в конце, поэтому вам понадобится источник ввода File. В этом случае вы можете настроить «Рабочий каталог» в файловом соединителе и использовать тот же каталог в качестве выходного пути для исходящей конечной точки файла. Таким образом, файл берется и перемещается входящей конечной точкой файла, а затем принимается исходящей конечной точкой файла для добавления полезной нагрузки в конце. В результате содержимое файла никогда не используется, и вы просто добавляете настроенную полезную нагрузку в конец файла.
Вот пример конфигурации:
<file:connector name="File" autoDelete="false" outputAppend="true" streaming="true" validateConnections="true"/>
<flow name="appendPayloadToFile">
<file:inbound-endpoint path="/source-dir/" connector-ref="File" responseTimeout="10000" />
<set-payload value="ADDED-CONTENT"/>
<file:outbound-endpoint path="/target-dir/" connector-ref="File" responseTimeout="10000"/>
</flow>
Если это решение недостаточно производительно, вы можете попробовать создать собственный компонент Java, который берет файл из входящей конечной точки, закрывает его, снова открывает для вывода и добавляет требуемый контент.
Если у вас есть поток для работы, пожалуйста, поделитесь им.
HTH, Маркос