2015-11-10 3 views
0

Необходимо использовать сторонний веб-сервис, открытый через SOAP. Но ответ имеет слишком глубокие графические объекты и время отклика очень велико: 40-60 сек. JAXB сортировка и разборки также добавляет значительную задержку сверху. Есть ли способ уменьшить задержку, используя protobuf/бережливость. Также некоторые последние модули приложений переносятся в Vertx. В то время как CXF имеет встроенный asychHttpClient, существует ли эквивалентный модуль в Vertx. В чем преимущество использования его над клиентом CXF?Оптимизация клиента Java SOAP и асинхронный клиент

+1

Если услуга, открытая для вас, является SOAP ... ну, для начала вам придется убедить другую сторону переписать весь свой слой API. – JensG

+0

Являются ли 40-60 секунд временем между запросом и ответом на ваш внешний SOAP WS или он также проводится внутри вашего собственного уровня/службы для преобразования (маршал/unmarshal) полученных объектов? –

+0

@ruffp В основном, клиент весеннего мыла, он возвращает объект результата после маршала/безмаршала, поэтому да, он включает время маршала/немаршала – rohit

ответ

2

Вы ссылаетесь на 2 отдельных вопроса здесь.

1) Служба третьей стороны занимает 40-60 секунд для ответа.

Как правило, вы не можете ускорить ответ, поэтому вам нужно иметь дело с ним как есть, а выбор, который вы используете, зависит только от вашего приложения. Vert.x может помочь в этом отношении, потому что он асинхронен по дизайну.

2) График объекта ответа большой, а десериализация JAXB имеет серьезные накладные расходы.

Скорее всего, буферные или протокольные буферы не помогут вам, потому что они совершенно разные технологии, чем SOAP/XML. Вероятно, проблема заключается в том, что JAXB считывает все сообщение в память, а затем создает для него полный графический объект, независимо от объема данных, который вам действительно нужен. Если вам действительно не нужны все данные, вам следует исследовать с помощью чего-то вроде Streaming API для XML (StAX), который является частью платформы Java. Он позволяет анализировать XML-сообщение без создания объектной модели для данных, которые вам не нужны.

+0

Спасибо, у вас есть предпочтение STAX по сравнению с XSLT, производительность wise.XSLT также может преобразовать ответ мыла на json response (string). – rohit

+0

Это зависит от вашего варианта использования. Также я не уверен, как преобразование ответа на JSON вписывается в изображение. Если вы имеете дело с очень большим ответом SOAP, и вам нужна только небольшая часть данных, я лично рассмотрю возможность использования StAX, поскольку он дает вам максимальный контроль над тем, как выполняется синтаксический анализ. Если вам нужно преобразовать в JSON, вы можете комбинировать с помощью StAX что-то вроде этого: http://wiki.fasterxml.com/JacksonStreamingApi – BCG

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