Top Description Fields Constructors Methods
org.springframework.http.client

public Class ReactorNettyClientRequestFactory

extends Object
implements ClientHttpRequestFactory, SmartLifecycle
Class Inheritance
All Implemented Interfaces
org.springframework.context.SmartLifecycle, org.springframework.context.Phased, org.springframework.context.Lifecycle, org.springframework.http.client.ClientHttpRequestFactory
Imports
java.io.IOException, java.net.URI, java.time.Duration, java.util.function.Function, io.netty.channel.ChannelOption, org.apache.commons.logging.Log, .LogFactory, reactor.netty.http.client.HttpClient, reactor.netty.resources.ConnectionProvider, .LoopResources, org.springframework.context.SmartLifecycle, org.springframework.http.HttpMethod, org.springframework.lang.Nullable, org.springframework.util.Assert

Reactor-Netty implementation of ClientHttpRequestFactory.

This class implements SmartLifecycle and can be optionally declared as a Spring-managed bean in order to support JVM Checkpoint Restore.

Authors
Arjen Poutsma, Sebastien Deleuze
Since
6.1

Field Summary

Modifier and TypeField and Description
private static final Function<HttpClient, HttpClient>
private Duration
private HttpClient
private final Object
private static final Log
private final Function<HttpClient, HttpClient>
private Duration
private final ReactorResourceFactory
private volatile boolean

Constructor Summary

AccessConstructor and Description
public
ReactorNettyClientRequestFactory()

Create a new instance of the ReactorNettyClientRequestFactory with a default HttpClient that has compression enabled.

public
ReactorNettyClientRequestFactory(HttpClient
the client to base on
httpClient
)

Create a new instance of the ReactorNettyClientRequestFactory based on the given HttpClient.

public
ReactorNettyClientRequestFactory(ReactorResourceFactory
the resource factory to obtain the resources from
resourceFactory
,
Function<HttpClient, HttpClient>
a mapper for further initialization of the created client
mapper
)

Constructor with externally managed Reactor Netty resources, including LoopResources for event loop threads, and ConnectionProvider for the connection pool.

Method Summary

Modifier and TypeMethod and Description
private static Function<HttpClient, HttpClient>
private static HttpClient
public ClientHttpRequest
createRequest(URI
the URI to create a request for
uri
,
HttpMethod
the HTTP method to execute
httpMethod
)

Implements org.springframework.http.client.ClientHttpRequestFactory.createRequest.

Create a new ClientHttpRequest for the specified URI and HTTP method.
public int
getPhase()

Overrides default org.springframework.context.SmartLifecycle.getPhase.

Return the phase that this lifecycle object is supposed to run in.

The default implementation returns DEFAULT_PHASE in order to let stop() callbacks execute before regular Lifecycle implementations.

public boolean
isAutoStartup()

Overrides default org.springframework.context.SmartLifecycle.isAutoStartup.

Returns true if this Lifecycle component should get started automatically by the container at the time that the containing ApplicationContext gets refreshed.
public boolean
isRunning()

Implements org.springframework.context.Lifecycle.isRunning.

Check whether this component is currently running.
public void
setConnectTimeout(int connectTimeout)

Set the underlying connect timeout in milliseconds.

public void
setConnectTimeout(Duration connectTimeout)

Set the underlying connect timeout in milliseconds.

public void
setExchangeTimeout(long exchangeTimeout)

Set the timeout for the HTTP exchange in milliseconds.

public void
setExchangeTimeout(Duration exchangeTimeout)

Set the timeout for the HTTP exchange.

public void
setReadTimeout(long readTimeout)

Set the underlying read timeout in milliseconds.

public void
setReadTimeout(Duration readTimeout)

Set the underlying read timeout as Duration.

public void
start()

Implements org.springframework.context.Lifecycle.start.

Start this component.
public void
stop()

Implements org.springframework.context.Lifecycle.stop.

Stop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method.
public final void
stop(Runnable callback)

Overrides default org.springframework.context.SmartLifecycle.stop.

Indicates that a Lifecycle component must stop if it is currently running.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

defaultInitializerback to summary
private static final Function<HttpClient, HttpClient> defaultInitializer
exchangeTimeoutback to summary
private Duration exchangeTimeout
httpClientback to summary
private HttpClient httpClient
lifecycleMonitorback to summary
private final Object lifecycleMonitor
loggerback to summary
private static final Log logger
mapperback to summary
private final Function<HttpClient, HttpClient> mapper
Annotations
@Nullable
readTimeoutback to summary
private Duration readTimeout
resourceFactoryback to summary
private final ReactorResourceFactory resourceFactory
Annotations
@Nullable
runningback to summary
private volatile boolean running

Constructor Detail

ReactorNettyClientRequestFactoryback to summary
public ReactorNettyClientRequestFactory()

Create a new instance of the ReactorNettyClientRequestFactory with a default HttpClient that has compression enabled.

ReactorNettyClientRequestFactoryback to summary
public ReactorNettyClientRequestFactory(HttpClient httpClient)

Create a new instance of the ReactorNettyClientRequestFactory based on the given HttpClient.

Parameters
httpClient:HttpClient

the client to base on

ReactorNettyClientRequestFactoryback to summary
public ReactorNettyClientRequestFactory(ReactorResourceFactory resourceFactory, Function<HttpClient, HttpClient> mapper)

Constructor with externally managed Reactor Netty resources, including LoopResources for event loop threads, and ConnectionProvider for the connection pool.

This constructor should be used only when you don't want the client to participate in the Reactor Netty global resources. By default the client participates in the Reactor Netty global resources held in reactor.netty.http.HttpResources, which is recommended since fixed, shared resources are favored for event loop concurrency. However, consider declaring a ReactorResourceFactory bean with globalResources=true in order to ensure the Reactor Netty global resources are shut down when the Spring ApplicationContext is stopped or closed and restarted properly when the Spring ApplicationContext is (with JVM Checkpoint Restore for example).

Parameters
resourceFactory:ReactorResourceFactory

the resource factory to obtain the resources from

mapper:Function<HttpClient, HttpClient>

a mapper for further initialization of the created client

Method Detail

applyLoopResourcesback to summary
private static Function<HttpClient, HttpClient> applyLoopResources(ReactorResourceFactory factory)
createHttpClientback to summary
private static HttpClient createHttpClient(ReactorResourceFactory resourceFactory, Function<HttpClient, HttpClient> mapper)
createRequestback to summary
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException

Implements org.springframework.http.client.ClientHttpRequestFactory.createRequest.

Doc from org.springframework.http.client.ClientHttpRequestFactory.createRequest.

Create a new ClientHttpRequest for the specified URI and HTTP method.

The returned request can be written to, and then executed by calling ClientHttpRequest#execute().

Parameters
uri:URI

the URI to create a request for

httpMethod:HttpMethod

the HTTP method to execute

Returns:ClientHttpRequest

the created request

Annotations
@Override
Exceptions
IOException:
in case of I/O errors
getPhaseback to summary
public int getPhase()

Overrides default org.springframework.context.SmartLifecycle.getPhase.

Doc from org.springframework.context.SmartLifecycle.getPhase.

Return the phase that this lifecycle object is supposed to run in.

The default implementation returns DEFAULT_PHASE in order to let stop() callbacks execute before regular Lifecycle implementations.

Annotations
@Override
isAutoStartupback to summary
public boolean isAutoStartup()

Overrides default org.springframework.context.SmartLifecycle.isAutoStartup.

Doc from org.springframework.context.SmartLifecycle.isAutoStartup.

Returns true if this Lifecycle component should get started automatically by the container at the time that the containing ApplicationContext gets refreshed.

A value of false indicates that the component is intended to be started through an explicit start() call instead, analogous to a plain Lifecycle implementation.

The default implementation returns true.

Annotations
@Override
isRunningback to summary
public boolean isRunning()

Implements org.springframework.context.Lifecycle.isRunning.

Doc from org.springframework.context.Lifecycle.isRunning.

Check whether this component is currently running.

In the case of a container, this will return true only if all components that apply are currently running.

Returns:boolean

whether the component is currently running

Annotations
@Override
setConnectTimeoutback to summary
public void setConnectTimeout(int connectTimeout)

Set the underlying connect timeout in milliseconds. A value of 0 specifies an infinite timeout.

Default is 30 seconds.

See Also
HttpClient#option(ChannelOption, Object), ChannelOption#CONNECT_TIMEOUT_MILLIS
setConnectTimeoutback to summary
public void setConnectTimeout(Duration connectTimeout)

Set the underlying connect timeout in milliseconds. A value of 0 specifies an infinite timeout.

Default is 30 seconds.

See Also
HttpClient#option(ChannelOption, Object), ChannelOption#CONNECT_TIMEOUT_MILLIS
setExchangeTimeoutback to summary
public void setExchangeTimeout(long exchangeTimeout)

Set the timeout for the HTTP exchange in milliseconds.

Default is 30 seconds.

setExchangeTimeoutback to summary
public void setExchangeTimeout(Duration exchangeTimeout)

Set the timeout for the HTTP exchange.

Default is 30 seconds.

setReadTimeoutback to summary
public void setReadTimeout(long readTimeout)

Set the underlying read timeout in milliseconds.

Default is 10 seconds.

setReadTimeoutback to summary
public void setReadTimeout(Duration readTimeout)

Set the underlying read timeout as Duration.

Default is 10 seconds.

startback to summary
public void start()

Implements org.springframework.context.Lifecycle.start.

Doc from org.springframework.context.Lifecycle.start.

Start this component.

Should not throw an exception if the component is already running.

In the case of a container, this will propagate the start signal to all components that apply.

Annotations
@Override
stopback to summary
public void stop()

Implements org.springframework.context.Lifecycle.stop.

Doc from org.springframework.context.Lifecycle.stop.

Stop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method. Consider implementing SmartLifecycle and its stop(Runnable) variant when asynchronous stop behavior is necessary.

Note that this stop notification is not guaranteed to come before destruction: On regular shutdown, Lifecycle beans will first receive a stop notification before the general destruction callbacks are being propagated; however, on hot refresh during a context's lifetime or on aborted refresh attempts, a given bean's destroy method will be called without any consideration of stop signals upfront.

Should not throw an exception if the component is not running (not started yet).

In the case of a container, this will propagate the stop signal to all components that apply.

Annotations
@Override
stopback to summary
public final void stop(Runnable callback)

Overrides default org.springframework.context.SmartLifecycle.stop.

Doc from org.springframework.context.SmartLifecycle.stop.

Indicates that a Lifecycle component must stop if it is currently running.

The provided callback is used by the LifecycleProcessor to support an ordered, and potentially concurrent, shutdown of all components having a common shutdown order value. The callback must be executed after the SmartLifecycle component does indeed stop.

The LifecycleProcessor will call only this variant of the stop method; i.e. Lifecycle#stop() will not be called for SmartLifecycle implementations unless explicitly delegated to within the implementation of this method.

The default implementation delegates to stop() and immediately triggers the given callback in the calling thread. Note that there is no synchronization between the two, so custom implementations may at least want to put the same steps within their common lifecycle monitor (if any).

Annotations
@Override