Mule: добавление строк в файл для системы обмена сообщениями на основе мулов.

Есть ли способ добавить строку, используя исходящий соединитель файла мула в существующем файле? Имея это требование обработки миллионов сообщений и добавления новой строки данных в файл для каждого сообщения. Каков наиболее оптимизированный подход для достижения этого с использованием исходящего файла в Mule.


person NAZAR REHMAN    schedule 10.02.2015    source источник


Ответы (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

person clare    schedule 10.02.2015

То, что Клэр сказала о 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, Маркос

person MarcosNC    schedule 11.02.2015