2016-11-14 7 views
1

Ответы API с объектом JSON , которые имеют массив объектов как {"items":[{...},{...},...],... с данными, которые нам нужно обработать. Проблема заключается в том, что массив имеет + 1.000 объектов, а конечная точка не реагирует на запросы, поэтому потоковая передача занимает много секунд, и с нашей «схемой программирования» с использованием Apache HttpClient потребляет конечную точку и Jackson, чтобы сериализовать ответ, мы ожидаем, чтобы получить полное тело для анализа всего объекта, который содержит массив, а не обрабатывать каждый элемент, когда он приходит, экономя время на использование памяти, поскольку, как только элемент обрабатывается, мы можем перейти к GC, чтобы освободить память, используемую элементом.Как обрабатывать большой ответ JSON от API с реактором?

Как я могу использовать с проектом Реактор Ответ в момент поступления данных? Нет проблем с изменением HTTP-клиента и/или сериализатора, который мы используем. Также мы используем Java 8 с Spring MVC с Spring 4.3, но мы можем перенести проект на предстоящий выпуск Spring.

Примечание: Конечная точка - это сторонний API, простой GET для сервера HTTP 1.1, мы не можем вносить изменения в его работу, например добавить разбивку на страницы или что-то в этом роде.

+0

Где вы можете найти решение вашей проблемы ?, Я столкнулся с той же проблемой, что и ответ, имеющий «элементы», и я не уверен, как его решить. –

+0

Рефакторинг был заморожен до сих пор, поэтому я не смог протестировать новую библиотеку WebClient Spring 5 + Reactor :( – Mrdev

ответ

1

Этот вариант использования поддерживается в предстоящей платформе Spring Web Reactive, доступной в настоящее время в Spring Framework 5.0 M3 и через start.spring.io при выборе Spring Boot 2.0 + Web Reactive.

Когда вы используете Flux входной параметр или возвращаемое значение, каждый шаг обработки является асинхронным и не блокирующим, а Jackson используется для сериализации каждого отдельного элемента, чтобы разрешить сериализатор/десериализацию большого и потенциально конечного потока элементы. В этом случае Spring позаботится о том, чтобы идентифицировать отдельный элемент JSON в массиве для десериализации или добавить [, , и ] массива JSON для сериализации. Это также позволяет потреблять потоки JSON, такие как Twiter JSON API.

Обратите внимание, что как только Джексон будет поддерживать асинхронную неблокирующую обработку, мы обновим кодеки Spring Framework 5, чтобы использовать их изначально.

+0

Спасибо Sebastien. Поэтому мне нужно использовать «WebClient» из Spring вместо клиента _Apache HttpClient_ или старого 'RestTemplate' Правильно? Что-то вроде 'new WebClient (новый ReactorHttpClientRequestFactory()). Выполнить (HttpRequestBuilders.get (" http://example.com ")) ...' – Mrdev

 Смежные вопросы

  • Нет связанных вопросов^_^