Многоадресная рассылка Apache Camel (ftps & file), создающая пустой файл - PullRequest
0 голосов
/ 26 июня 2019

Я создал верблюжий (2.20.1) маршрут, используя отличный DSL.Мне нужно использовать многоадресную рассылку для 2 конечных точек, а именно.ftps и файл.Если порядок маршрутов - ftps и file, то file является свойством, записанным на ftp-сервере, но в файловой системе записывается пустой файл (размером 0 байт).Если я изменяю порядок, т.е. файл и затем ftps, тогда файл записывается в файловую систему правильно, а пустой файл записывается на ftp-сервер.Он отлично работает на FTP-сервере Apache Mina, но с клиентским FTP-сервером он работает, как указано выше.

Я пробовал оба варианта многоадресной рассылки:

.to("ftps:....").to("file:...")

, а также

.to("ftps:...").to("file:..."))

Также пробовал parallelProcessing(), но результат все тот же.

camelContext.addRoutes(new RouteBuilder() {
 def void configure() {
  from("file:///home/xyz/?fileName=file.txt&charset=utf-8&noop=true")
   .multicast()
   .to("ftps://localhost:21/files?username=anonymous&password=anonymous&binary=true&fileName=file.txt&passiveMode=true&fileExist=Fail")
   .to("file://${directory}?fileName=\${file:name}-\${date:now:yyyyMMddHHmmssSSS}")
 }
})

Я ожидаю, что многоадресная рассылка должна записывать одинаковое содержимое в обе конечные точки без потери данных.

1 Ответ

0 голосов
/ 26 июня 2019

См. Почему мое сообщение пустое? . Потребитель файла возвращает InputStream, который используется первой конечной точкой и, следовательно, пуст для второй конечной точки. Вам необходимо включить Потоковое кеширование или преобразовать тело в какой-либо объект многократного использования (например, String) перед многоадресной передачей.

Включить потоковое кэширование:

from("file:///home/xyz/?fileName=file.txt&charset=utf-8&noop=true")
    .streamCaching()
    .multicast()
    ...

Преобразование тела:

from("file:///home/xyz/?fileName=file.txt&charset=utf-8&noop=true")
    .convertBodyTo(String.class)
    .multicast()
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...