1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.http.examples;
28
29 import java.util.concurrent.Future;
30 import java.util.concurrent.TimeUnit;
31
32 import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
33 import org.apache.hc.client5.http.async.methods.SimpleHttpRequests;
34 import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
35 import org.apache.hc.client5.http.async.methods.SimpleRequestProducer;
36 import org.apache.hc.client5.http.async.methods.SimpleResponseConsumer;
37 import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
38 import org.apache.hc.client5.http.impl.async.HttpAsyncClients;
39 import org.apache.hc.core5.concurrent.FutureCallback;
40 import org.apache.hc.core5.http.HttpHost;
41 import org.apache.hc.core5.io.CloseMode;
42 import org.apache.hc.core5.reactor.IOReactorConfig;
43 import org.apache.hc.core5.util.TimeValue;
44 import org.apache.hc.core5.util.Timeout;
45
46
47
48
49
50 public class AsyncClientConnectionEviction {
51
52 public static void main(final String[] args) throws Exception {
53
54 final IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
55 .setSoTimeout(Timeout.ofSeconds(5))
56 .build();
57
58 final CloseableHttpAsyncClient client = HttpAsyncClients.custom()
59 .setIOReactorConfig(ioReactorConfig)
60 .evictExpiredConnections()
61 .evictIdleConnections(TimeValue.ofSeconds(10))
62 .build();
63
64 client.start();
65
66 final HttpHost target = new HttpHost("httpbin.org");
67
68 final SimpleHttpRequest request = SimpleHttpRequests.get(target, "/");
69 final Future<SimpleHttpResponse> future1 = client.execute(
70 SimpleRequestProducer.create(request),
71 SimpleResponseConsumer.create(),
72 new FutureCallback<SimpleHttpResponse>() {
73
74 @Override
75 public void completed(final SimpleHttpResponse response) {
76 System.out.println(request.getRequestUri() + "->" + response.getCode());
77 System.out.println(response.getBody());
78 }
79
80 @Override
81 public void failed(final Exception ex) {
82 System.out.println(request.getRequestUri() + "->" + ex);
83 }
84
85 @Override
86 public void cancelled() {
87 System.out.println(request.getRequestUri() + " cancelled");
88 }
89
90 });
91
92 future1.get();
93
94 Thread.sleep(TimeUnit.SECONDS.toMillis(30));
95
96
97
98 final Future<SimpleHttpResponse> future2 = client.execute(
99 SimpleRequestProducer.create(request),
100 SimpleResponseConsumer.create(),
101 new FutureCallback<SimpleHttpResponse>() {
102
103 @Override
104 public void completed(final SimpleHttpResponse response) {
105 System.out.println(request.getRequestUri() + "->" + response.getCode());
106 System.out.println(response.getBody());
107 }
108
109 @Override
110 public void failed(final Exception ex) {
111 System.out.println(request.getRequestUri() + "->" + ex);
112 }
113
114 @Override
115 public void cancelled() {
116 System.out.println(request.getRequestUri() + " cancelled");
117 }
118
119 });
120
121 future2.get();
122
123 System.out.println("Shutting down");
124 client.close(CloseMode.GRACEFUL);
125 }
126
127 }