omcat8、springmvc、httpclient4.5
有A、B、C三个应用
C负责操作数据库,提供接口,返回JSON
B负责处理业务,提供接口,返回JSON,并调用C的接口,保存/读取数据
A负责前台,调用B的接口
正常使用没什么问题,但碰到并发的时候,出现僵死状态,感觉接口处理不过来,然后超时。
大并发时,页面一直转,就是加载不出来,然后后台sql也一直在执行,要等待所有的操作执行完了,C的接口才能正常加载。而此时B和A就会访问超时了。
请问有什么破解方案没?
tomcat 使用nio模式启动了。并且有两个C,通过nginx来负载。
httpclient调用代码大致如下:
public static String post(String url, Map<String, Object> param)
throws IOException {
String responseBody = null;
RequestConfig config = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).setConnectionRequestTimeout(20000).setCookieSpec(CookieSpecs.STANDARD_STRICT).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(config).build();
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> nameValuePairs = new LinkedList<>();
for (String key : param.keySet()) {
Object obj = param.get(key);
if (obj == null) {
obj = new String("");
}
nameValuePairs.add(new BasicNameValuePair(key, obj.toString()));
}
CloseableHttpResponse httpResponse = null;
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
httpResponse = httpClient.execute(httpPost);
StatusLine line = httpResponse.getStatusLine();
if(line.getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
responseBody = EntityUtils.toString(httpEntity);
EntityUtils.consume(httpEntity);
}
} catch (UnsupportedEncodingException e) {
throw e;
} catch (ClientProtocolException e) {
throw e;
} catch (IOException e) {
throw e;
} finally {
if (httpResponse != null) {
httpResponse.close();
}
httpClient.close();
}
return responseBody;
}
请问在服务器,或者http调用上面,有什么可优化方案?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。