#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 ?