Package io.micronaut.http.client.netty
Interface NettyClientCustomizer
public interface NettyClientCustomizer
Interface implemented by users to hook into the pipeline setup of the netty HTTP client.
The internal pipeline of our HTTP client is by necessity complex and unstable across versions. While we strive to retain compatibility, please do not make too many assumptions about the Micronaut HTTP client pipeline structure when implementing this interface.
Implementations of this interface are scoped to different lifetimes. The root customizers can be added through the
The internal pipeline of our HTTP client is by necessity complex and unstable across versions. While we strive to retain compatibility, please do not make too many assumptions about the Micronaut HTTP client pipeline structure when implementing this interface.
Implementations of this interface are scoped to different lifetimes. The root customizers can be added through the
NettyClientCustomizer.Registry
, and live while the context is running. Customizers with
narrower scope are created from the root customizers through
specialization
when new netty channels are created by the
client, e.g. when a new request is made. These specialized customizers will then receive
notifications when a certain step in the pipeline setup is reached, so they can do their own
customizations on the channel and the channel pipeline they received in the specialization step.- Since:
- 3.6.0
- Author:
- yawkat
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic enum
Enum to describe the role of the channel passed tospecializeForChannel(Channel, ChannelRole)
.static interface
Interface implemented by the HTTP client registry to register customizers. -
Method Summary
Modifier and TypeMethodDescriptiondefault void
Called when the initial connection pipeline has been built, before any incoming data has been processed.default void
Called when the "final" request pipeline has been built for processing http requests.default void
Called when the stream pipeline has been built, after any TLS or HTTP upgrade handshake.default @NonNull NettyClientCustomizer
specializeForBootstrap
(@NonNull io.netty.bootstrap.Bootstrap bootstrap) default @NonNull NettyClientCustomizer
specializeForChannel
(@NonNull io.netty.channel.Channel channel, @NonNull NettyClientCustomizer.ChannelRole role)
-
Method Details
-
specializeForChannel
@NonNull default @NonNull NettyClientCustomizer specializeForChannel(@NonNull @NonNull io.netty.channel.Channel channel, @NonNull @NonNull NettyClientCustomizer.ChannelRole role) - Parameters:
channel
- The new channel to specialize for.role
- The role (or scope) of the channel.- Returns:
- The new customizer, or
this
if no specialization needs to take place.
-
specializeForBootstrap
@NonNull default @NonNull NettyClientCustomizer specializeForBootstrap(@NonNull @NonNull io.netty.bootstrap.Bootstrap bootstrap) - Parameters:
bootstrap
- The bootstrap that will be used to connect- Returns:
- The new customizer, or
this
if no specialization needs to take place. - Since:
- 4.7.0
-
onInitialPipelineBuilt
default void onInitialPipelineBuilt()Called when the initial connection pipeline has been built, before any incoming data has been processed. -
onStreamPipelineBuilt
default void onStreamPipelineBuilt()Called when the stream pipeline has been built, after any TLS or HTTP upgrade handshake. -
onRequestPipelineBuilt
default void onRequestPipelineBuilt()Called when the "final" request pipeline has been built for processing http requests. This is called for each request, potentially multiple times for the same connection if the connection is pooled. In the future, for HTTP2, this may use a new channel for each request stream.
-