1. Apache HttpComponents
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setMaxConnPerRoute(20)
.setMaxConnTotal(50)
.build();
httpclient.start();
HttpGet request = new HttpGet("http://example.com");
httpclient.execute(request, new FutureCallback<HttpResponse>() {
@Override
public void completed(final HttpResponse response) {
}
@Override
public void failed(final Exception ex) {
}
@Override
public void cancelled() {
}
});
2. AsyncHttpClient
AsyncHttpClient client = asyncHttpClient();
BoundRequestBuilder requestBuilder = client.prepareGet("http://example.com");
ListenableFuture<Response> futureResponse = requestBuilder.execute();
futureResponse.addListener(() -> {
try {
Response response = futureResponse.get();
}
}, executorService);
3. Netty
NioEventLoopGroup group = new NioEventLoopGroup();
Bootstrap bootstrap = new Bootstrap()
.group(group)
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new HttpClientCodec());
ch.pipeline().addLast(new HttpObjectAggregator(1024 * 1024));
ch.pipeline().addLast(new ClientHandler());
}
});
ChannelFuture future = bootstrap.connect("example.com", 80).sync();
URI uri = new URI("http://example.com");
FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, uri.getRawPath());
future.channel().writeAndFlush(request);
future.channel().closeFuture().sync();