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秒