Http Client接続池使用demo
3608 ワード
以下はHttpClient接続プールのテストコードです。以下の初歩的な結論を得ました。
1、接続池の管理設定全体の接続数、
2、接続池管理はドメイン名によって接続数を個別に設定でき、接続数は全体のリンク数より小さい。
3、ドメイン名の下の住所がない場合は、そのドメイン名の下のリンク数を記入します。
4、http応答が終了したら、自動的にリンクを返却し、他の要求は直接にリンクを取得して使用する。
次のステップ
1、リンクタイムアウト異常メカニズムを設定し、タイムアウトリンクを解放する
2、httpリンク自動再試行メカニズム
3、深入りし続ける
1、接続池の管理設定全体の接続数、
2、接続池管理はドメイン名によって接続数を個別に設定でき、接続数は全体のリンク数より小さい。
3、ドメイン名の下の住所がない場合は、そのドメイン名の下のリンク数を記入します。
4、http応答が終了したら、自動的にリンクを返却し、他の要求は直接にリンクを取得して使用する。
次のステップ
1、リンクタイムアウト異常メカニズムを設定し、タイムアウトリンクを解放する
2、httpリンク自動再試行メカニズム
3、深入りし続ける
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import java.io.IOException;
/**
* Created by shuangjun.yang on 2016/3/30.
* httpclient
*/
public class HttpPoolTest {
public static void main(String[] args) throws IOException {
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setMaxTotal(10); //
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(5); // ,
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(poolingHttpClientConnectionManager)
.build();
HttpGet httpGet = new HttpGet("http://www.begincode.net");
HttpGet httpGet1 = new HttpGet("http://www.begincode.net/blogComment/blogId/95");
new HttpThread(httpClient,httpGet,"1").start();
System.out.println("Thread 1");
new HttpThread(httpClient,httpGet1,"2").start();
System.out.println("Thread 2");
new HttpThread(httpClient,httpGet1,"3").start();
System.out.println("Thread 3");
new HttpThread(httpClient,httpGet1,"4").start();
System.out.println("Thread 4");
new HttpThread(httpClient,httpGet1,"5").start();
System.out.println("Thread 5");
new HttpThread(httpClient,httpGet1,"6").start();
System.out.println("Thread 6");
new HttpThread(httpClient,httpGet1,"7").start();
System.out.println("Thread 7");
}
}
class HttpThread extends Thread {
HttpGet httpGet;
CloseableHttpClient closeableHttpClient;
HttpClientContext httpClientContext;
String flag;
public HttpThread(CloseableHttpClient closeableHttpClient, HttpGet httpGet,String flag) {
this.closeableHttpClient = closeableHttpClient;
this.httpGet = httpGet;
this.httpClientContext = HttpClientContext.create();
this.flag = flag;
}
@Override
public void run() {
try {
CloseableHttpResponse response = closeableHttpClient.execute(
httpGet, httpClientContext);
try {
System.out.println(" "+flag);
//
HttpEntity entity = response.getEntity();
System.out.println(" "+flag+" ");
//
//System.out.println(EntityUtils.toString(entity));
Thread.sleep(10000);
System.out.println(" "+flag);
}catch (InterruptedException e){
e.printStackTrace();
}finally {
//
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}