发送http请求给后端服务,在数据量大的时候报错:

org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 144445481; received: 25370248)
意思是数据传输被提前终止了,期望传输144445481 B,只是传输了25370248 B。

org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body-LMLPHP

http请求模型见上,在client用server的ip加端口访问服务,即使数据量大也没有问题。但是一旦通过域名访问,也就是通过Nginx访问,数据量大就会报上述错误。实际上是Nginx对响应结果做了限制,如果Nginx超时时间设置的较短,而buffer很大的情况下,可以修改Nginx超时时间,将时间调大,这样在大数据量传输的过程中就不会因为超时而终止。如果Nginx超时时间足够长,但是buffer较小的话,可以调大buffer来解决。

还有一点需要注意,就是同步异步的问题可能会引发这个问题,比如:

method A{

    语句1;

    语句2(异步调用其他数据库查询);

    语句3(finally块关闭连接)

}

在上面的逻辑中,如果方法A是同步调用,但是数据库查询是异步,可能的一种情况是:数据没有传输完成,但是语句3已经执行了,连接被关闭,也可能引发上面的问题。
--------------------- 
作者:anickname 
来源:CSDN 
原文:https://blog.csdn.net/javajxz008/article/details/82684479 

01-23 15:17