Apache Camel: как внутренне работает streamDownload при загрузке файла из SFTP и как направить его содержимое в очередь? - PullRequest
0 голосов
/ 17 октября 2019

Требуется не загружать файл 1 ГБ в память, а загружать файл в виде потока XML.

private String sftpComponent(String sftpFileName) {
    return "sftp://xxx/xxx"
            + "?username=xxx"
            + "&password=xxx"
            + "&streamDownload=true" 
            + "&useList=true"
            + "&stepwise=false"
            + "&disconnect=true"
            + "&passiveMode=true"
            + "&reconnectDelay=10000"
            + "&bridgeErrorHandler=true"
            + "&delay=30000"
            + "&include="+ sftpFileName
            + "&preMove=$simple{file:onlyname}.$simple{date:now:yyyy-MM-dd'T'hh-mm-ss}.underproc"
            + "&move=$simple{file:onlyname.noext}.$simple{date:now:yyyy-MM-dd'T'hh-mm-ss}.done"
            + "&moveFailed=$simple{file:onlyname.noext}.$simple{date:now:yyyy-MM-dd'T'hh-mm-ss}.error"
            + "&readLock=idempotent-changed"
            + "&idempotentRepository=#infinispanCache"
            + "&readLockRemoveOnCommit=true";
}
from(sftpComponent(sftpFileName))
    .split(body().tokenizeXML("case", "cases"))
    .streaming()
    .inOnly("jms/caseQueue")
<cases> 
    <case>
    </case>
    <case>
    </case> 
</cases>

Файл успешно выбран и помечен как успешный, а поток -не разбивать содержимое и перемещать его в caseQueue.

Когда я использую "download = true", это работает как шарм.

Может кто-нибудь предложить, какие дополнительные настройки требуются в этом случае или альтернативный подход, чтобы исправить выше?

...