import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class ProtoUtils {
protected final static Logger logger = LoggerFactory.getLogger(ProtoUtils.class);
private static PoolingHttpClientConnectionManager cm=new PoolingHttpClientConnectionManager();
static{
//设置最大连接数不超过200
cm.setMaxTotal(200);
//每个路由默认的连接数20
cm.setDefaultMaxPerRoute(20);
//路由最大连接数不超过50
HttpHost locaHost=new HttpHost("localhost",80, "http://");
HttpRoute route=new HttpRoute(locaHost);
cm.setMaxPerRoute(route, 50);
}
public static byte[] post(String url, byte[] date){
Map<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "x-protobuf;charset=UTF-8");
try {
HttpEntity httpEntity = post(url, null, headers, new ByteArrayEntity(date));
return EntityUtils.toByteArray(httpEntity);
} catch (Exception e) {
logger.error("Http post protobuf failed:"+url, e);
}
return date;
}
public static HttpEntity post(String url, Map<String, String> paraments, Map<String, String> headers, HttpEntity entity){
RequestBuilder requestBuilder = RequestBuilder.post().setUri(url);
if(headers != null){
for (Map.Entry<String, String> entry : headers.entrySet()) {
requestBuilder.setHeader(entry.getKey(), entry.getValue());
}
}
if(paraments != null){
for (Map.Entry<String, String> entry : paraments.entrySet()) {
requestBuilder.addParameter(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
if(entity != null){
requestBuilder.setEntity(entity);
}
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(3000)
.setConnectionRequestTimeout(3000)
.setSocketTimeout(3000).build();
HttpUriRequest httpUriRequset = requestBuilder.setConfig(requestConfig).build();
try {
return execute(url, httpUriRequset);
} catch (Exception e) {
httpUriRequset.abort();
logger.error("Http post protobuf failed:"+url, e);
}
return null;
}
private static HttpEntity execute(String url, HttpUriRequest httpUriRequset) throws ClientProtocolException, IOException{
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
CloseableHttpResponse httpResponse = httpClient.execute(httpUriRequset);
StatusLine httpStatus = httpResponse.getStatusLine();
if(httpStatus.getStatusCode() != 200){
if(httpResponse != null){
EntityUtils.consume(httpResponse.getEntity());
httpResponse.close();
}
}
return httpResponse.getEntity();
}
}
网友评论