Создание нового FlowFile или повторное использование старого - PullRequest
1 голос
/ 25 мая 2020

Я пишу специальный процессор, в котором преобразую содержимое FlowFile. Для простоты в этом вопросе он просто напишет одно и то же содержимое. content.

Теперь есть метод

session.create(flowFile);

, который создает новый FlowFile.

Это заставило меня задуматься, не все ли я делаю неправильно, записывая в исходный FlowFile. Сделать это так просто, так что это нормально. Но, может быть, лучше создать новый FlowFile?
Каковы последствия обоих способов и когда правильно выбрать тот или другой? Или наблюдаемое поведение будет таким же?

Это будет некий код, который создает новый FlowFile, записывая содержимое исходного:

public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
  FlowFile flowFile = session.get();
  if (flowFile == null) return;

  FlowFile newFile = session.create(flowFile);
  session.write(
             newFile,
             output) -> session.read(flowFile).transferTo(output) // Do transfomration here
  );
  session.transfer(REL_SUCCESS, newFile);
}

Ответы [ 2 ]

3 голосов
/ 25 мая 2020
  • session.write (flowFile, callback) - выполняет данный обратный вызов для содержимого, соответствующего данному flowFile.
    • Полезно, когда вам не нужен исходный контент.
  • session.create () - Создает новый FlowFile в репозитории без content и без какой-либо связи с родительским FlowFile.
    • Этот метод подходит только в том случае, если данные получены или созданы из внешней системы.
  • session.create (parentFlowFile) - Создает новый FlowFile в репозитории без содержимого, но с родительской связью с parentFlowFile. Вновь созданный FlowFile унаследует все родительские атрибуты, кроме UUID.
    • Используйте, когда вы хотите вывести и исходный, и новый потоковый файл.
    • Или вы хотите создать несколько потоковых файлов из ввода.
3 голосов
/ 25 мая 2020

это зависит от ваших требований, но, как правило, вы должны писать в исходном FlowFile.

если вы создаете новый Flow-файл с session.create(), новый UUID будет связан с вашим Flow-файлом, и он сделает происхождение ваших данных беспорядочно. , FS ...)
- 1 вход N выход (например процессор splitRecords)

...