Как загрузить большой файл через HTTP в Camel без нехватки памяти

#java #spring-boot #rest #download #apache-camel

#java #spring-boot #остальное #Скачать #apache-camel

Вопрос:

Я создаю своего рода API-шлюз, используя apache camel и Spring boot для определения маршрутов к различным службам в нашей сети. Но у меня возникли проблемы с одним маршрутом к сервису, который используется для загрузки больших (100 мб ~ 500 МБ) файлов с нашего сервера. Кажется, что файл всегда полностью загружается в память, вызывая исключения OutOfMemory, если несколько человек вызывают его одновременно.

Маршрут определяется примерно так:

 restConfiguration()
    .component("undertow")
    .host("0.0.0.0")
    .port("{{api.port}}")
    .contextPath("/api");

rest("/download")
    .get("/{fileId}")
    .route()
    .setHeader(Exchange.HTTP_PATH, constant("/download"))
    .setHeader(Exchange.HTTP_QUERY, simple("fileid=${header.fileId}"))
    .toD("{{download-service.url}}?bridgeEndpoint=trueamp;throwExceptionOnFailure=false");
  

Я пытался найти способ избежать выдачи исключений OutOfMemory при вызове / download /, используя netty и jetty вместо undertow и включая или отключая потоковое кэширование, но независимо от того, что он продолжает загружать весь файл в память вместо того, чтобы просто отправлять его клиенту.

Я надеюсь, что один из вас может помочь мне с этим.

Комментарии:

1. Что происходит, когда вы устанавливаете параметр disableStreamCache=true ?