在我们的应用程序中,到目前为止,我们正在向这样的地方发出HttpPost请求
HttpResponse makeRequest(String payload) {
HttpPost request = new HttpPost();
request.setEntity(new StringEntity(payload));
//Set headers etc
return this.httpClient.execute(request);
}
我们的有效负载完全是JSON,我们使用JacksonLibrary来处理JSON转换。 (序列化和反序列化)。在我们的性能测试期间,我们观察到将一个对象序列化为一个字符串(有效负载),并且httpClient获取该有效负载并发出请求需要花费大量时间。 Jackson提供了一个工具,可以直接将字符串写入输出流/写入器。 (流媒体的种类)。
有什么方法可以配置HttpRequestBase / HttpPost等来使用来自该输出流的响应作为有效负载输入? - >我认为Piping输出流到输入流将起作用,但是没有暴露的功能来设置HttpRequest的输入流。
答案 0 :(得分:0)
我怀疑有一种合理的方式来进行流式传输,但是改进它的一种方法是使用writeValueAsBytes
并通过httpclient发布字节 - 它不会执行unessesary convertion bytes-> chars-> bytes。
你也说“将对象序列化为字符串(有效负载)和 httpClient获取有效负载和使请求花费大量时间“ - 太多事情无法得出任何结论。您需要更精确地调查才能找到确切的瓶颈。例如。可能你只是没有正确使用杰克逊,例如在这里:https://theartofdev.com/2014/07/20/jackson-objectmapper-performance-pitfall/