A non-blocking HTTP client implementation for AWS SDK Java applications using Netty framework, enabling efficient network communication with AWS services through asynchronous I/O operations
npx @tessl/cli install tessl/maven-software-amazon-awssdk--netty-nio-client@2.32.0A high-performance, non-blocking HTTP client implementation for AWS SDK Java v2 applications using the Netty framework. This client enables efficient asynchronous network communication with AWS services through NIO (New I/O) operations, supporting both HTTP/1.1 and HTTP/2 protocols with advanced connection pooling, proxy support, and SSL/TLS configuration.
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>netty-nio-client</artifactId>
</dependency>import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
import software.amazon.awssdk.http.nio.netty.SdkEventLoopGroup;
import software.amazon.awssdk.http.nio.netty.Http2Configuration;
import software.amazon.awssdk.http.nio.netty.ProxyConfiguration;import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
import software.amazon.awssdk.http.SdkAsyncHttpClient;
// Create with default configuration
SdkAsyncHttpClient httpClient = NettyNioAsyncHttpClient.create();
// Create with custom configuration
SdkAsyncHttpClient httpClient = NettyNioAsyncHttpClient.builder()
.maxConcurrency(100)
.connectionTimeout(Duration.ofSeconds(10))
.readTimeout(Duration.ofSeconds(30))
.protocol(Protocol.HTTP2)
.build();
// Use with AWS service clients
S3AsyncClient s3Client = S3AsyncClient.builder()
.httpClient(httpClient)
.build();
// Always close resources
httpClient.close();The Netty NIO Client is built around several key components:
The primary HTTP client implementation providing asynchronous HTTP communication with comprehensive configuration options for timeouts, connection pooling, and protocol settings.
public final class NettyNioAsyncHttpClient implements SdkAsyncHttpClient {
public CompletableFuture<Void> execute(AsyncExecuteRequest request);
public void close();
public String clientName();
public static Builder builder();
public static SdkAsyncHttpClient create();
}
public interface Builder extends SdkAsyncHttpClient.Builder<Builder> {
Builder maxConcurrency(Integer maxConcurrency);
Builder readTimeout(Duration readTimeout);
Builder connectionTimeout(Duration connectionTimeout);
Builder protocol(Protocol protocol);
Builder eventLoopGroup(SdkEventLoopGroup eventLoopGroup);
NettyNioAsyncHttpClient build();
}Event loop and channel factory management for efficient resource sharing and lifecycle control across multiple HTTP clients.
public final class SdkEventLoopGroup {
public EventLoopGroup eventLoopGroup();
public ChannelFactory<? extends Channel> channelFactory();
public static SdkEventLoopGroup create(EventLoopGroup eventLoopGroup);
public static Builder builder();
}
public interface Builder {
Builder numberOfThreads(Integer numberOfThreads);
Builder threadFactory(ThreadFactory threadFactory);
SdkEventLoopGroup build();
}HTTP/2 protocol-specific settings for stream management, window sizes, and connection health monitoring.
public final class Http2Configuration implements ToCopyableBuilder<Http2Configuration.Builder, Http2Configuration> {
public Long maxStreams();
public Integer initialWindowSize();
public Duration healthCheckPingPeriod();
public static Builder builder();
}
public interface Builder extends CopyableBuilder<Builder, Http2Configuration> {
Builder maxStreams(Long maxStreams);
Builder initialWindowSize(Integer initialWindowSize);
Builder healthCheckPingPeriod(Duration healthCheckPingPeriod);
}Comprehensive proxy support with automatic system property and environment variable integration for enterprise environments.
public final class ProxyConfiguration implements ToCopyableBuilder<ProxyConfiguration.Builder, ProxyConfiguration> {
public String scheme();
public String host();
public int port();
public String username();
public String password();
public Set<String> nonProxyHosts();
public static Builder builder();
}
public interface Builder extends CopyableBuilder<Builder, ProxyConfiguration> {
Builder scheme(String scheme);
Builder host(String host);
Builder port(int port);
Builder useSystemPropertyValues(Boolean useSystemPropertyValues);
}ServiceLoader integration enabling automatic HTTP client discovery by the AWS SDK without explicit configuration.
public class NettySdkAsyncHttpService implements SdkAsyncHttpService {
public SdkAsyncHttpClient.Builder createAsyncHttpClientFactory();
}The service is automatically registered and discovered when the netty-nio-client is on the classpath, eliminating the need for manual HTTP client configuration in many use cases.
// AWS SDK Core Types
interface SdkAsyncHttpClient extends SdkHttpClient {
CompletableFuture<Void> execute(AsyncExecuteRequest request);
void close();
String clientName();
}
interface AsyncExecuteRequest {
SdkHttpRequest request();
AsyncRequestBody requestBody();
AsyncExecuteRequest.ResponseHandler responseHandler();
}
enum Protocol {
HTTP1_1, HTTP2
}
enum ProtocolNegotiation {
ALPN, ASSUME_PROTOCOL
}
// Netty Types
interface EventLoopGroup extends ScheduledExecutorService, Iterable<EventExecutor> {
// Netty event loop group interface
}
interface ChannelFactory<T extends Channel> {
T newChannel();
}
class ChannelOption<T> {
// Netty channel configuration options
}
enum SslProvider {
JDK, OPENSSL, OPENSSL_REFCNT
}// Standard Java duration type used throughout the API
class Duration {
static Duration ofSeconds(long seconds);
static Duration ofMillis(long millis);
static Duration ofMinutes(long minutes);
}interface TlsKeyManagersProvider {
KeyManager[] keyManagers();
}
interface TlsTrustManagersProvider {
TrustManager[] trustManagers();
}