#java #java-stream #filestream #vert.x
#java #java-stream #filestream #vert.x
Вопрос:
У меня есть требование, подобное приведенному ниже.
- Моему приложению необходимо вызвать API, который возвращает ответ в виде двоичных данных (файлы PDF или изображений размером менее 30 МБ).
- Как только я получу двоичный ответ, мне нужно подготовить объект json с некоторыми другими элементами и вызвать 2nd api (этот api не поддерживает потоковую передачу) для обработки запроса.
Проблема здесь, на шаге 1, заключается в том, что если я получаю большой файл, например, 10 или 20 МБ двоичных данных, память сервера становится занятой. Я не могу выполнять потоковую передачу после чтения файла с шага 1 по шаг 2, поскольку 2-й API не поддерживает потоковую передачу. Какие у нас есть варианты, чтобы потреблять меньше памяти и отправлять json во 2-й API? Мы используем vert x и реактивную java. Пожалуйста, предложите.
Комментарии:
1. Я не думаю, что есть какие- либо другие варианты. Помимо изменения требований или ограничений.
2. Это зависит от того, как вы получите свой ответ и может ли построение JSON начаться без полного завершенного ответа от API1. Если нет, другого способа нет — вы должны сохранить весь первый ответ в памяти.
3. Конструкция JSON с другими элементами уже доступна перед вызовом step1, но только один элемент зависит от ответа от step1. API step2 ожидает все элементы вместе.
4. Как вы отправляете двоичный файл в полезной нагрузке JSON во 2-й API в кодировке base64? Какой клиент вы используете
HttpClient
илиWebClient
? Пожалуйста, добавьте несколько фрагментов, иначе вопрос остается неопределенным, чтобы на него можно было ответить правильно.5. да, мы кодируем base64 и используем веб-клиент rxjava.