NettyAsyncHttpClientBuilder Class

  • java.lang.Object
    • com.azure.core.http.netty.NettyAsyncHttpClientBuilder

public class NettyAsyncHttpClientBuilder

Builder class responsible for creating instances of HttpClient backed by Reactor Netty. The client built from this builder can support sending requests synchronously and asynchronously. Use com.azure.core.http.HttpClient#sendSync(HttpRequest, Context) to send the provided request synchronously with contextual information.

Building a new HttpClient instance

HttpClient client = new NettyAsyncHttpClientBuilder()
     .port(8080)
     .wiretap(true)
     .build();

Building a new HttpClient instance using http proxy.

Configuring the Netty client with a proxy is relevant when your application needs to communicate with Azure services through a proxy server.

HttpClient client = new NettyAsyncHttpClientBuilder()
     .port(8080)
     .wiretap(true)
     .build();

Building a new HttpClient instance with HTTP/2 Support.

HttpClient client = new NettyAsyncHttpClientBuilder()
     .port(8080)
     .wiretap(true)
     .build();

It is also possible to create a Netty HttpClient that only supports HTTP/2.

// Constructs an HttpClient that only supports HTTP/2.
 HttpClient client = new NettyAsyncHttpClientBuilder(reactor.netty.http.client.HttpClient.create()
     .protocol(HttpProtocol.H2))
     .build();

Constructor Summary

Constructor Description
NettyAsyncHttpClientBuilder()

Creates a new builder instance, where a builder is capable of generating multiple instances of HttpClient backed by Reactor Netty.

NettyAsyncHttpClientBuilder(HttpClient nettyHttpClient)

Creates a new builder instance, where a builder is capable of generating multiple instances of HttpClient based on the provided Reactor Netty HttpClient.

Method Summary

Modifier and Type Method and Description
HttpClient build()

Creates a new Netty-backed HttpClient instance on every call, using the configuration set in the builder at the time of the build method call.

NettyAsyncHttpClientBuilder configuration(Configuration configuration)

Sets the configuration store that is used during construction of the HTTP client.

NettyAsyncHttpClientBuilder connectTimeout(Duration connectTimeout)

Sets the connection timeout for a request to be sent.

NettyAsyncHttpClientBuilder connectionProvider(ConnectionProvider connectionProvider)

Sets the connection provider.

NettyAsyncHttpClientBuilder disableBufferCopy(boolean disableBufferCopy)

Disables deep copy of response ByteBuffer into a heap location that is managed by this client as opposed to the underlying netty library which may use direct buffer pool.

NettyAsyncHttpClientBuilder eventLoopGroup(EventLoopGroup eventLoopGroup)

Sets the IO event loop group that will be used to run IO loops.

NettyAsyncHttpClientBuilder nioEventLoopGroup(NioEventLoopGroup nioEventLoopGroup)

Deprecated

Sets the NIO event loop group that will be used to run IO loops.

NettyAsyncHttpClientBuilder port(int port)

Sets the port which this client should connect, which by default will be set to port 80.

NettyAsyncHttpClientBuilder proxy(ProxyOptions proxyOptions)

Sets the ProxyOptions that the client will use.

NettyAsyncHttpClientBuilder readTimeout(Duration readTimeout)

Sets the read timeout duration used when reading the server response.

NettyAsyncHttpClientBuilder responseTimeout(Duration responseTimeout)

Sets the response timeout duration used when waiting for a server to reply.

NettyAsyncHttpClientBuilder wiretap(boolean enableWiretap)

Enables the Netty wiretap feature.

NettyAsyncHttpClientBuilder writeTimeout(Duration writeTimeout)

Sets the writing timeout for a request to be sent.

Methods inherited from java.lang.Object

Constructor Details

NettyAsyncHttpClientBuilder

public NettyAsyncHttpClientBuilder()

Creates a new builder instance, where a builder is capable of generating multiple instances of HttpClient backed by Reactor Netty.

NettyAsyncHttpClientBuilder

public NettyAsyncHttpClientBuilder(HttpClient nettyHttpClient)

Creates a new builder instance, where a builder is capable of generating multiple instances of HttpClient based on the provided Reactor Netty HttpClient.

// Creates a reactor-netty client with netty logging enabled.
 reactor.netty.http.client.HttpClient baseHttpClient = reactor.netty.http.client.HttpClient.create()
     .wiretap(TcpClient.class.getName(), LogLevel.INFO);
 // Create an HttpClient based on above reactor-netty client and configure EventLoop count.
 HttpClient client = new NettyAsyncHttpClientBuilder(baseHttpClient)
     .eventLoopGroup(new NioEventLoopGroup(5))
     .build();

Parameters:

nettyHttpClient - base reactor netty HttpClient

Method Details

build

public HttpClient build()

Creates a new Netty-backed HttpClient instance on every call, using the configuration set in the builder at the time of the build method call. Please be aware that client built from this builder can support synchronously and asynchronously call of sending request. Use com.azure.core.http.HttpClient#sendSync(HttpRequest, Context) to send the provided request synchronously with contextual information.

Returns:

A new Netty-backed HttpClient instance.

configuration

public NettyAsyncHttpClientBuilder configuration(Configuration configuration)

Sets the configuration store that is used during construction of the HTTP client.

The default configuration store is a clone of the global configuration store, use NONE to bypass using configuration settings during construction.

Parameters:

configuration - The configuration store used to

Returns:

The updated NettyAsyncHttpClientBuilder object.

connectTimeout

public NettyAsyncHttpClientBuilder connectTimeout(Duration connectTimeout)

Sets the connection timeout for a request to be sent.

The connection timeout begins once the request attempts to connect to the remote host and finishes once the connection is resolved.

If connectTimeout is null either PROPERTY_AZURE_REQUEST_CONNECT_TIMEOUT or a 10-second timeout will be used, if it is a Duration less than or equal to zero then no timeout will be applied. When applying the timeout the greatest of one millisecond and the value of connectTimeout will be used.

By default, the connection timeout is 10 seconds.

Parameters:

connectTimeout - Connect timeout duration.

Returns:

The updated NettyAsyncHttpClientBuilder object.

connectionProvider

public NettyAsyncHttpClientBuilder connectionProvider(ConnectionProvider connectionProvider)

Sets the connection provider.

Code Sample

// The following creates a connection provider which will have each connection use the base name
 // 'myHttpConnection', has a limit of 500 concurrent connections in the connection pool, has no limit on the
 // number of connection requests that can be pending when all connections are in use, and removes a connection
 // from the pool if the connection isn't used for 60 seconds.
 ConnectionProvider connectionProvider = ConnectionProvider.builder("myHttpConnection")
     .maxConnections(500)
     .pendingAcquireMaxCount(-1)
     .maxIdleTime(Duration.ofSeconds(60))
     .build();

 HttpClient client = new NettyAsyncHttpClientBuilder()
     .connectionProvider(connectionProvider)
     .build();

Parameters:

connectionProvider - the connection provider

Returns:

the updated NettyAsyncHttpClientBuilder object.

disableBufferCopy

public NettyAsyncHttpClientBuilder disableBufferCopy(boolean disableBufferCopy)

Disables deep copy of response ByteBuffer into a heap location that is managed by this client as opposed to the underlying netty library which may use direct buffer pool. Caution: Disabling this is not recommended as it can lead to data corruption if the downstream consumers of the response do not handle the byte buffers before netty releases them. If copy is disabled, underlying Netty layer can potentially reclaim byte array backed by the ByteBuffer upon the return of onNext(). So, users should ensure they process the ByteBuffer immediately and then return.

HttpClient client = new NettyAsyncHttpClientBuilder()
     .port(8080)
     .disableBufferCopy(true)
     .build();

 client.send(httpRequest)
     .flatMapMany(response -> response.getBody())
     .map(byteBuffer -> completeProcessingByteBuffer(byteBuffer))
     .subscribe();

Parameters:

disableBufferCopy - If set to true, the client built from this builder will not deep-copy response ByteBuffers.

Returns:

The updated NettyAsyncHttpClientBuilder object.

eventLoopGroup

public NettyAsyncHttpClientBuilder eventLoopGroup(EventLoopGroup eventLoopGroup)

Sets the IO event loop group that will be used to run IO loops.

Code Samples

int threadCount = 5;
 HttpClient client = new NettyAsyncHttpClientBuilder()
     .eventLoopGroup(new NioEventLoopGroup(threadCount))
     .build();

Parameters:

eventLoopGroup - The EventLoopGroup that will run IO loops.

Returns:

the updated NettyAsyncHttpClientBuilder object.

nioEventLoopGroup

@Deprecated
public NettyAsyncHttpClientBuilder nioEventLoopGroup(NioEventLoopGroup nioEventLoopGroup)

Deprecated

Sets the NIO event loop group that will be used to run IO loops.

Parameters:

nioEventLoopGroup - The NioEventLoopGroup that will run IO loops.

Returns:

the updated NettyAsyncHttpClientBuilder object.

port

public NettyAsyncHttpClientBuilder port(int port)

Sets the port which this client should connect, which by default will be set to port 80.

Parameters:

port - The port to connect to.

Returns:

the updated NettyAsyncHttpClientBuilder object.

proxy

public NettyAsyncHttpClientBuilder proxy(ProxyOptions proxyOptions)

Sets the ProxyOptions that the client will use.

Parameters:

proxyOptions - The proxy configuration to use.

Returns:

the updated NettyAsyncHttpClientBuilder object.

readTimeout

public NettyAsyncHttpClientBuilder readTimeout(Duration readTimeout)

Sets the read timeout duration used when reading the server response.

The read timeout begins once the first response read is triggered after the server response is received. This timeout triggers periodically but won't fire its operation if another read operation has completed between when the timeout is triggered and completes.

If readTimeout is null or PROPERTY_AZURE_REQUEST_READ_TIMEOUT or a 60-second timeout will be used, if it is a Duration less than or equal to zero then no timeout period will be applied to response read. When applying the timeout the greatest of one millisecond and the value of readTimeout will be used.

Parameters:

readTimeout - Read timeout duration.

Returns:

The updated NettyAsyncHttpClientBuilder object.

responseTimeout

public NettyAsyncHttpClientBuilder responseTimeout(Duration responseTimeout)

Sets the response timeout duration used when waiting for a server to reply.

The response timeout begins once the request write completes and finishes once the first response read is triggered when the server response is received.

If responseTimeout is null either PROPERTY_AZURE_REQUEST_RESPONSE_TIMEOUT or a 60-second timeout will be used, if it is a Duration less than or equal to zero then no timeout will be applied to the response. When applying the timeout the greatest of one millisecond and the value of responseTimeout will be used.

Parameters:

responseTimeout - Response timeout duration.

Returns:

The updated NettyAsyncHttpClientBuilder object.

wiretap

public NettyAsyncHttpClientBuilder wiretap(boolean enableWiretap)

Enables the Netty wiretap feature.

Parameters:

enableWiretap - Flag indicating wiretap status

Returns:

the updated NettyAsyncHttpClientBuilder object.

writeTimeout

public NettyAsyncHttpClientBuilder writeTimeout(Duration writeTimeout)

Sets the writing timeout for a request to be sent.

The writing timeout does not apply to the entire request but to the request being sent over the wire. For example a request body which emits 10 8KB buffers will trigger 10 write operations, the last write tracker will update when each operation completes and the outbound buffer will be periodically checked to determine if it is still draining.

If writeTimeout is null either PROPERTY_AZURE_REQUEST_WRITE_TIMEOUT or a 60-second timeout will be used, if it is a Duration less than or equal to zero then no write timeout will be applied. When applying the timeout the greatest of one millisecond and the value of writeTimeout will be used.

Parameters:

writeTimeout - Write operation timeout duration.

Returns:

The updated NettyAsyncHttpClientBuilder object.

Applies to