后端通过org.springframework.web.client.RestTemplate发送请求,发现错误信息如上。搜索解决办法时了解到可能的原因是:
- 使用RestTemplate连续发送请求,隔一笔就会报一次recv failed,根据定位,是服务方配置的短连接导致的。连接已经关闭,但是消费方配置的是长链接,第二次复用上一个未超时的连接时报错。
解决办法:
- 将request的header中Connection值设置为false
原始代码:
JSONObject param = new JSONObject();
param.put("keyframeInfos", keyframeInfos);
ResponseEntity<ResponseData> responseEntity = restTemplate.postForEntity(url, param, ResponseData.class);
修改后:
JSONObject param = new JSONObject();
param.put("keyframeInfos", keyframeInfos);
// 请求头
HttpHeaders headers = new HttpHeaders();
//解决使用RestTemplate连续发送请求,隔一笔就会报一次recv failed问题
headers.add("Connection", "false");
// 请求
HttpEntity<String> request = new HttpEntity(param, headers);
ResponseEntity<ResponseData> responseEntity = restTemplate.postForEntity(url, request, ResponseData.class);
- 为RestTemplate的HttpClientBuilder设置支持重试。
结论:第二个方法没有尝试 第一个方法成功解决。