问题遇到的现象和发生背景
跑定时任务时发送大批量数据给第三方时,到一定数据量会出现:I/O exception (java.net.SocketException) caught when processing request to {}->http://ip地址 Socket closed
用代码块功能插入代码,请勿粘贴截图
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post(url)
.header("Datetime", dateStr)
.header("OperatorId", operatorId)
.header("Token", token)
.header("Signature", sign)
.header("User-Agent", "apifox/1.0.0 (https://www.apifox.cn)")
.header("Content-Type", "application/json")
.body(body)
.asString();
return response.getBody();
运行结果及报错内容
1766832 [myScheduler-29] INFO org.apache.http.impl.execchain.RetryExec - I/O exception (java.net.SocketException) caught when processing request to {}->http://ip地址: Socket closed
1766832 [myScheduler-29] INFO org.apache.http.impl.execchain.RetryExec - Retrying request to {}->http://ip地址
com.mashape.unirest.http.exceptions.UnirestException: java.net.SocketException: Socket closed
我的解答思路和尝试过的方法
最开始是定时任务一次性查出大批量数据(24000条),以1200条一组多线程去请求上报数据。结果直接崩了,缓了10多分钟才正常,且数据大部分没报上去
优化后:定时任务执行完毕后等待1分钟再次执行,一次查240条,在跑到1200条会出现运行结果及报错内容的内容
看到报错信息后,socket连接关闭,怀疑是过载,所以减少一次数据量。
再次优化:定时任务执行完毕后等待10秒再次执行,一次查12条,跑到1500条出现行结果及报错内容的内容
我想要达到的结果
怎么样让这个Unirest操作大批量不报错,能正常报送数据。