http client和http pool都是在局域网向一台tomcat发送
1:http client
public static String callPostJson(String url, String json) {
HttpClient client = new HttpClient();
client.getParams().setContentCharset("utf-8");
client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
PostMethod post = new PostMethod(url);
String result = StringUtils.EMPTY;
try {
RequestEntity entity = new StringRequestEntity(json,"application/json","UTF-8");
post.setRequestEntity(entity);
post.setRequestHeader("Content-Type","application/json;charset=UTF-8");
client.executeMethod(post);
result = post.getResponseBodyAsString();
} catch (SocketTimeoutException se) {
logger.error(se.getMessage(), se);
throw new ServiceException("connection.timeout");
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
return "{"success":"false","msg":"" + ex.getMessage() + ""}";
} finally {
post.releaseConnection();
}
return result;
}
测试结果;5000条耗时43秒
2:http pool
client工厂
private static CloseableHttpClient httpClient;
private static PoolingHttpClientConnectionManager cm;
static {
cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(500);
cm.setDefaultMaxPerRoute(50);
final RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(1000).setConnectionRequestTimeout(500).build();
httpClient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(requestConfig).build();
}
public static CloseableHttpClient getHttpClient() {
return httpClient;
}
http工具类
public static void callPostJson(String url, String param) {
CloseableHttpClient httpClient = HttpPoolFactory.getHttpClient();
HttpPost post = new HttpPost(url);
try {
StringEntity s = new StringEntity(param);
s.setContentEncoding("UTF-8");
s.setContentType("application/json");//发送json数据需要设置contentType
post.setEntity(s);
httpClient.execute(post);
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
post.releaseConnection();
}
}
测试结果;5000条耗时21秒